Я делаю некоторые перенаправления с помощью nginx, но для некоторых он автоматически сопоставляет все в конце URL-адреса, что создает перенаправления на неправильные страницы.
У меня есть эти два редиректа.
location /en/blogging {
return 301 /en/blog;
}
location ~^/en/blogging/(?<suffix>.*)$ {
return 301 /en;
}
Проблема в том, что первый, кажется, автоматически добавляет подстановочный знак к перенаправлению.
Текущий результат:
/ en / blogging
/ en / blogging / test
/ en / bloggingtest
Все перенаправлены на
/ en / blog
Ожидаемый результат:
/ en / blogging -> / en / blog
/ en / blogging / test -> / en
/ en / bloggingtest -> Без перенаправления
Почему это происходит и как этого избежать?
Ты используешь 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
блок. Видеть этот документ для подробностей.