У меня есть следующая конфигурация nginx:
server {
server_name tawp.in;
location / {
rewrite ^/r/([^/]*)$ /s/ta/$1;
rewrite ^/e/(.*)$ /en/ta/$1;
uwsgi_pass unix:/tmp/uwsgi.sock;
uwsgi_param UWSGI_CHDIR /home/yuvipanda/sites/wikishortipy;
uwsgi_param UWSGI_CALLABLE app;
uwsgi_param UWSGI_MODULE app;
uwsgi_param UWSGI_FILE /home/yuvipanda/sites/wikishortipy/app.py;
uwsgi_param UWSGI_SETENV WIKISHORTIPY_SETTINGS=/home/yuvipanda/sites/wikishortipy/settings.py;
include uwsgi_params;
}
}
Я ожидал, что два правила перезаписи просто перезапишут внутри, но они вызывают отправку внешних 301 редиректов. Что я делаю не так?
Вы можете проверить сайт по адресу tawp.in/r/3, чтобы увидеть дополнительный редирект.
редактировать: Добавление last
флаг на перезапись не помогает (как не должно)
директива break остановит работу модуля перезаписи. Если вы используете перерыв внутри местоположения, ваш запрос будет обработан в нем, поэтому:
rewrite ^/r/([^/]*)$ /s/ta/$1 break;
rewrite ^/e/(.*)$ /en/ta/$1 break;
Попробуйте добавить last
в правила перезаписи, например:
rewrite ^/r/([^/]*)$ /s/ta/$1 last;
rewrite ^/e/(.*)$ /en/ta/$1 last;