Я делаю некоторые перенаправления с помощью 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 / (?
будет соответствовать любому URI, который начинается с / en / blogging /
, но то же самое относится и к location / en / blogging /
, но без дополнительная сложность регулярного выражения и без захвата суффикса.
Например:
location = /en/blogging {
return 301 /en/blog;
}
location ^~ /en/blogging/ {
return 301 /en;
}
Модификатор ^ ~
может потребоваться для изменения приоритета расположения префикса, особенно если у вас есть другие конфликтующие расположение регулярных выражений в том же блоке сервера
. Подробнее см. этот документ .