Nginx重写规则删除路径节点

Nginx重写规则删除路径节点

假设用户尝试使用以下 URL 访问我的网站上的给定图像: http://www.mywebsite.com/blog/image1.jpg?someParam=100

我需要一个重写规则,从路径中删除“博客”节点:

http://www.mywebsite.com/image1.jpg?someParam=100

答案1

尝试一下这个:

location /blog {
 rewrite ^/blog(/.*)$ $1 last;
}

如果您需要为多个站点添加此子句,则不能将其放在层次结构的更高位置,因为“location”子句不能全局指定,只能针对特定站点指定。如果您需要为两个或更多站点添加此子句,则可以将其放在另一个配置文件中,然后只需将其“包含”到需要此重定向的每个站点中即可。

答案2

根据定义rewrite指令的位置,有两种方法可以实现它:

A. 在server上下文中

server {
    ...
    rewrite ^/blog(/.*)$ $1 last;
    return 403;
    ...
}

B. 在location上下文中

location /blog {
    rewrite ^/blog(/.*)$ $1 break;
}

Teo,你为什么将标志改为break* 因为,如果将此指令放在上下文中location,则last标志可能会nginx运行 10 个周期并返回 500 错误。

相关内容