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 -> Без перенаправления

Почему это происходит и как этого избежать?

1
задан 16 May 2019 в 12:04
1 ответ

Вы используете 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;
}

Модификатор ^ ~ может потребоваться для изменения приоритета расположения префикса, особенно если у вас есть другие конфликтующие расположение регулярных выражений в том же блоке сервера . Подробнее см. этот документ .

0
ответ дан 4 December 2019 в 03:00

Теги

Похожие вопросы