Nginx автоматически добавляет подстановочные знаки в перенаправления
Я делаю некоторые перенаправления с nginx, но для некоторых он автоматически сопоставляет все в конце URL, что создает перенаправления на неправильные страницы.
У меня есть эти два перенаправления.
location /en/blogging {
return 301 /en/blog;
}
location ~^/en/blogging/(?<suffix>.*)$ {
return 301 /en;
}
Проблема в том, что первый, кажется, автоматически добавляет подстановочный знак к перенаправлению.
Текущий результат:
/ Ы / блоггинг
/ EN / блоги / тест
/ О / bloggingtest
Все перенаправлены на
/ Ы / блог
Ожидаемый результат:
/ en / blogging -> / en / blog
/ en / blogging / test -> / en
/ ru /bloggingtest -> Без перенаправления
Почему это происходит и как я могу избежать этого?
1 ответ
Ты используешь location /en/blogging
который соответствует любому URI, который начинается с /en/blogging
, Вы должны использовать location = /en/blogging
если вы хотите сопоставить один URI /en/blogging
,
Заявление location ~^/en/blogging/(?<suffix>.*)$
будет соответствовать любому URI, который начинается с /en/blogging/
- но потом так же location /en/blogging/
, но без дополнительной сложности регулярного выражения и без захвата суффикса.
Например:
location = /en/blogging {
return 301 /en/blog;
}
location ^~ /en/blogging/ {
return 301 /en;
}
^~
Модификатор может быть необходим для изменения приоритета расположения префикса, особенно если у вас есть другие конфликтующие расположения регулярных выражений в том же server
блок. Смотрите этот документ для деталей.