Nginx如何为URL添加尾部斜杠 排除含点及指定前缀路径
Nginx 重定向规则合并方案
直接可用的合并后规则
rewrite ^(?!/no-trailing-slash)([^.]*[^/])$ $1/ permanent;
规则逻辑说明
- 排除规则1:
^(?!/no-trailing-slash)负向先行断言,所有以/no-trailing-slash开头的URL都不会触发重定向 - 排除规则2:
[^.]*匹配路径中不含.的请求,自动跳过所有带后缀的静态资源(如.xml、.js、.png等) - 触发规则:
[^/]匹配当前URL末尾不是斜杠的请求,满足所有条件后自动在末尾补斜杠
效果验证(完全匹配需求示例)
www.site.com/foo→ 符合触发条件,重定向到www.site.com/foo/www.site.com/foo/baz→ 符合触发条件,重定向到www.site.com/foo/baz/www.site.com/foo.xml→ 路径包含.,不触发重定向www.site.com/no-trailing-slash→ 匹配排除前缀,不触发重定向www.site.com/no-trailing-slash/child→ 匹配排除前缀,不触发重定向
多排除场景扩展方案(可选)
如果后续需要添加更多排除路径,建议用map配置更易维护:
# 需写在Nginx的http配置块中 map $request_uri $need_trailing_slash { default 1; ~*\. 0; # 所有含.的路径不添加尾部斜杠 ~*^/no-trailing-slash 0; # 特定前缀路径不添加 # 后续新增排除规则直接加在这即可 } # 写在对应站点的server配置块中 if ($need_trailing_slash = 1) { rewrite ^(.*[^/])$ $1/ permanent; }
内容的提问来源于stack exchange,提问作者Alfonse
相关产品推荐
相关产品推荐

