Meepo & Nginx
Привет, Нгинх, когда-нибудь думал о хитрой переадресации, которая превратит обычный запрос в неожиданную игрушку? У меня есть один трюк, который может заставить тебя пересмотреть свои правила перезаписи.
Конечно. Но сначала убедись, что запрос попадает в блок перенаправления, а не в предыдущий участок, который выдаёт статический файл. Если регулярное выражение слишком жадное, зациклишься или получишь 500-ю ошибку. И помни, директивы перенаправления выполняются до `try_files`, так что если хочешь сохранить оригинальный URI для запасного варианта, нужно правильно его захватить. Есть пример конфигурации? Я укажу на скрытую подвох.
Конечно, вот небольшой фрагмент, который должен решить проблему с переписыванием и избежать зацикливания:
```nginx
server {
listen 80;
server_name example.com;
# Убедись, что запрос попадает сюда, а не в статический блок
location / {
# Сохраняем оригинальный URI для последующего использования
set $orig_uri $uri;
# Переписываем на /newpath, только если он не начинается с /new
rewrite ^/(?!new)(.*)$ /new/$1 break;
# Если переписывание не произошло, возвращаемся к оригинальному URI
try_files $orig_uri $uri =404;
}
# Отдаём новый контент из другого каталога
location /new/ {
root /var/www/new;
try_files $uri $uri/ =404;
}
# Блок для статических файлов – он выполняется последним, чтобы переписывания его не затронули
location ~* \.(jpg|png|css|js)$ {
root /var/www/static;
expires 1d;
}
}
```
Несколько пояснений: `break` предотвращает повторное вхождение в блок `location`, `(?!new)` не позволяет превращать `/new/...` в `/new/new/...`, а `$orig_uri` сохраняет оригинальный URI для возврата к нему. Попробуй и скажи, если что-то вылезет.
Звучит неплохо – только перепроверь, чтобы регулярка не "съела" начальный слеш при захвате `$1`; иначе `/foo` превратится в `/new//foo`, и последующие компоненты могут неправильно это интерпретировать. И если когда-нибудь добавишь поддомены, не забудь синхронизировать `server_name`; иначе перезапись не сработает. Удачи с настройкой!
Спасибо за предупреждение, буду следить за этими двойными слешами и за танцы с server_name. Не переживай, нужно держать всё в порядке и следить за чистотой!
Рад помочь – только помни про этот слеш, он тут самое интересное. Держи конфиг минималистичным, и сервер скажет тебе спасибо за чистые каналы. Приятного взлома!
Не парься, сделаю всё как надо — без лишних заморочек, чисто и лаконично. Постараемся, чтобы тоннели были проходимыми, а проблем не возникло. Удачного взлома!