Nginx имеет приоритет перед перенаправлениями?

У меня есть несколько перенаправлений, настроенных во включаемом файле для нашей конфигурации nginx. На днях я заметил, что некоторые редиректы не работают. t работают, и, похоже, именно на них влияют правила перезаписи.

Может ли кто-нибудь взглянуть и увидеть, что я сделал не так? Вот соответствующие фрагменты:

/etc/nginx/sites-available/MySite.conf:

server {
    listen 443 ssl http2 default_server;
    server_name www.example.com ;
    include /etc/nginx/sites-available/includes/Redirects.conf;
    include /etc/nginx/sites-available/includes/Rewrites.conf;
    ...
}

/etc/nginx/sites-available/includes/Redirects.conf:

#This redirect works:
location ~ ^/images/products/1234.jpg { return 301 /images/products/5678.jpg$is_args$args ; }
#This redirect does NOT work
location ~ ^/p/1234 { return 301 /p/5678$is_args$args ; }

/ etc / nginx / sites- available / includes / Rewrites.conf:

#This rewrites the short URL /p/<ProductCode> to our ecommerce system's default URL
#I think this is what is conflicting with the redirect above
rewrite ^/p/(.*) /mm5/merchant.mvc?Screen=PROD&Product_Code=$1 break;
1
задан 25 October 2018 в 18:19
1 ответ

Это может быть не понятно из документации, но директивы перезаписи в блоке сервера вычисляются последовательно перед поиском местоположения для обработки URI.

Таким образом, оператор "rewrite ^/p/(.*) ..." будет вычислен перед оператором "location ~ ^/p/1234 . ...", независимо от порядка следования этих двух операторов.

Вы можете преобразовать свои операторы переписать в блоки местоположения или наоборот.

Например:

rewrite ^/p/1234 /p/5678 permanent;
rewrite ^/p/(.*) /mm5/merchant.mvc?Screen=PROD&Product_Code=$1 break;
2
ответ дан 3 December 2019 в 20:11

Теги

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