Meepo & Nginx
Meepo Meepo
Привет, Нгинх, когда-нибудь думал о хитрой переадресации, которая превратит обычный запрос в неожиданную игрушку? У меня есть один трюк, который может заставить тебя пересмотреть свои правила перезаписи.
Nginx Nginx
Конечно. Но сначала убедись, что запрос попадает в блок перенаправления, а не в предыдущий участок, который выдаёт статический файл. Если регулярное выражение слишком жадное, зациклишься или получишь 500-ю ошибку. И помни, директивы перенаправления выполняются до `try_files`, так что если хочешь сохранить оригинальный URI для запасного варианта, нужно правильно его захватить. Есть пример конфигурации? Я укажу на скрытую подвох.
Meepo Meepo
Конечно, вот небольшой фрагмент, который должен решить проблему с переписыванием и избежать зацикливания: ```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 для возврата к нему. Попробуй и скажи, если что-то вылезет.