Nginx移除URL末尾斜杠时排除特定URL的配置方法咨询
Nginx移除URL末尾斜杠时排除特定URL的配置方法咨询
嗨,我来帮你搞定这个问题!你的现有配置是针对非目录的URL移除末尾斜杠,现在要让像/bar/、/foo/这类特定路径保留斜杠,有几种实用的实现方式,我给你详细说明:
方法一:用unless简化重写规则
这是最简洁的写法,直接在rewrite指令里加排除条件,不用嵌套if:
if (!-d $request_filename) { rewrite ^/(.+)/$ /$1 permanent unless ($request_uri ~ ^/(bar|foo)/$); }
简单解释下:
unless ($request_uri ~ ^/(bar|foo)/$)意思是:只有当请求URL不是/bar/或/foo/时,才执行移除末尾斜杠的重写- 如果之后要排除更多路径,直接在
(bar|foo)里新增就行,比如改成(bar|foo|test|demo)
方法二:用location块优先匹配特定路径
这种方式更贴合Nginx的配置逻辑(尽量避免嵌套if),先单独处理需要保留斜杠的路径:
# 优先匹配需要保留末尾斜杠的路径,直接走正常业务逻辑 location ~ ^/(bar|foo)/$ { # 这里替换成你对应这些路径的实际配置,比如root、proxy_pass等 try_files $uri $uri/ =404; } # 处理其他非目录URL的末尾斜杠移除 if (!-d $request_filename) { rewrite ^/(.+)/$ /$1 permanent; }
小提醒
- 修改完配置后,一定要用
nginx -t命令验证语法是否正确,别直接重启导致服务出错 - 验证通过后,执行
nginx -s reload重新加载配置就能生效啦
备注:内容来源于stack exchange,提问作者peris
相关产品推荐
相关产品推荐

