Nginx移除URL末尾斜杠时如何排除指定2个目录?
Nginx 移除末尾斜杠并排除指定目录的正确配置
嘿,我来帮你搞定这个Nginx重定向的问题~你之前碰到的服务器启动报错,根源是rewrite指令里的参数不匹配——当你添加了排除目录的正则断言后,必须明确使用捕获组变量$1,不然Nginx会识别不了参数数量,直接抛出invalid number of arguments错误。
要排除两个目录(比如folder1和folder2),正确的配置应该是这样的:
# 移除URL末尾斜杠,排除指定目录 rewrite ^/(?!folder1|folder2)(.*)/$ /$1 permanent;
给你拆解下这个规则的逻辑:
^/(?!folder1|folder2):这是负向前瞻断言,用来匹配开头不是/folder1/或/folder2/的URL,确保这两个目录的末尾斜杠不会被重定向(.*)/$:捕获除了排除目录之外、以斜杠结尾的路径内容/$1:将捕获到的内容作为重定向目标,自动去掉末尾的斜杠permanent:返回301永久重定向,对搜索引擎SEO更友好
另外要注意,你之前的原配置没加$1能生效算是个特殊情况,但一旦加入了排除目录的正则断言,就必须明确使用$1对应捕获组,不然Nginx会因为参数数量不匹配而启动失败。
内容的提问来源于stack exchange,提问作者Bart Huisman
相关产品推荐
相关产品推荐

