Nginx移除URL尾部斜杠规则仅首页不生效该如何解决
问题原因
你当前的规则失效是因为:
- Nginx 会先将URI标准化,把路径中的多个连续斜杠合并为单个斜杠,所以
sub.example.com///标准化后得到的URI是/ - 你原有的
rewrite ^/(.*)/$ /$1 permanent;规则需要匹配「/开头 + 任意内容 + /结尾」的结构,当URI仅为/时,无法满足规则的匹配条件,因此不会触发重定向。
修改方案
将你配置中的rewrite ^/(.*)/$ /$1 permanent;这一行替换为以下两段配置即可:
# 处理根路径的任意数量尾部斜杠,兼容带请求参数的场景 if ($request_uri ~ ^/+(\?.*)?$) { return 301 $scheme://$host$is_args$args; } # 处理非根路径的任意数量尾部斜杠,兼容原有的生效逻辑 rewrite ^/(.+)/+$ /$1 permanent;
生效验证
修改后先执行nginx -t验证配置语法无误,再执行nginx -s reload重载配置,即可覆盖所有场景:
- 根路径多斜杠:
sub.example.com///=>sub.example.com - 原有的非根路径所有场景保持正常生效
- 带参数的根路径请求也可正常处理:
sub.example.com///?id=1=>sub.example.com?id=1
内容的提问来源于stack exchange,提问作者Dinario
相关产品推荐
相关产品推荐

