Nginx配置FAQ子目录重定向遇无限循环问题求助
Nginx配置FAQ子目录重定向遇无限循环问题求助
嘿,我来帮你搞定这个Nginx重定向的无限循环问题~
首先得说说为啥会出现循环:你写的这条规则 rewrite ^/faq/(.*)$ /faq/$1 redirect; 其实会匹配所有以 /faq/ 开头的请求,包括 /faq/ 本身——因为正则里的 (.*) 可以匹配空字符串。所以当用户访问 /faq/xxx 时,会被重定向到 /faq/,但重定向后的 /faq/ 又会被这条规则再次匹配,触发新一轮重定向,就陷入无限循环啦。
给你几个靠谱的解决方案,按需选用:
方案一:用更精确的正则匹配
只匹配 /faq/ 后面有实际内容的URL,避免匹配 /faq/ 本身:
rewrite ^/faq/.+$ /faq/ permanent;
这里的 .+ 表示至少有一个字符,完美避开了 /faq/ 这个主路径,不会触发循环。
方案二:用location块限定范围
用location直接匹配带子路径的请求,直接返回重定向:
location ~ ^/faq/.+ { return 301 /faq/; }
这种写法比rewrite更直观,Nginx处理起来也更高效。
方案三:用if判断过滤主路径
如果需要更灵活的判断,可以用if来排除 /faq/ 本身(不过Nginx里建议尽量少用if,简单场景没问题):
if ($request_uri !~ ^/faq/$) { rewrite ^/faq/(.*)$ /faq/ permanent; }
这里判断请求的URI不是 /faq/ 时才执行重定向,从根源上避免了循环。
另外提一句:建议用 permanent(301永久重定向),对搜索引擎SEO更友好;如果只是临时调整URL,可以换成 redirect(302临时重定向)。
备注:内容来源于stack exchange,提问作者Andreas Armbruster
相关产品推荐
相关产品推荐

