У меня есть несколько перенаправлений, настроенных во включаемом файле для нашей конфигурации nginx. На днях я заметил, что некоторые перенаправления не работают, и, похоже, именно на них влияют правила перезаписи.
Может ли кто-нибудь взглянуть и увидеть, что я сделал не так? Вот соответствующие фрагменты:
/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;
Это может быть неясно из документации, но rewrite
директивы в server
блоки оцениваются последовательно перед поиски location
для обработки URI.
Так что "rewrite ^/p/(.*) ...
"заявление будет оценено до"location ~ ^/p/1234 ...
"заявление, независимо от порядка этих двух утверждений.
Вы можете преобразовать свой rewrite
заявления в location
блоки или наоборот.
Например:
rewrite ^/p/1234 /p/5678 permanent;
rewrite ^/p/(.*) /mm5/merchant.mvc?Screen=PROD&Product_Code=$1 break;