Nginx 重写优先于重定向吗?

Nginx 重写优先于重定向吗?

我在包含文件中为我们的 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;

答案1

从文档中可能看得不太清楚,但是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;

相关内容