Назад | Перейти на главную страницу

Nginx автоматически добавляет подстановочные знаки в перенаправления

Я делаю некоторые перенаправления с помощью 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 блок. Видеть этот документ для подробностей.