解决.htaccess目录重定向循环问题:将domain.com/xx定向至/xx/zzzzz
解决/xx重定向到/xx/zzzzz的循环问题
这个重定向循环问题很常见,根源在于你之前的redirect 301 /xx /xx/zzzzz用了前缀匹配——服务器会把所有以/xx开头的请求(包括/xx/zzzzz本身)都触发重定向,自然就陷入循环了。核心解决思路是:只精确匹配/xx(含带结尾斜杠的/xx/)这个根路径,不匹配它的子路径。
下面分两种主流Web服务器给出具体配置:
Apache 配置方案
使用mod_rewrite实现精确匹配,避免前缀匹配的问题:
RewriteEngine On # 精确匹配/xx或/xx/,重定向到目标子目录 RewriteRule ^xx/?$ /xx/zzzzz [R=301,L]
^xx/?$:正则表达式表示匹配以xx开头,后面可选一个斜杠,然后直接结束的路径——也就是只匹配/xx和/xx/[R=301,L]:R=301表示永久重定向,L表示这是最后一条规则,避免后续规则干扰
Nginx 配置方案
用精确匹配的location指令,或者正则匹配来实现:
方式1:精确匹配单个路径
server { # 你的其他服务器配置(监听端口、域名等)... # 匹配不带斜杠的/xx location = /xx { return 301 /xx/zzzzz; } # 匹配带斜杠的/xx/ location = /xx/ { return 301 /xx/zzzzz; } }
方式2:正则合并匹配
server { # 你的其他服务器配置... # 同时匹配/xx和/xx/ location ~ ^/xx/?$ { return 301 /xx/zzzzz; } }
=符号表示精确匹配,只有当请求路径完全等于指定值时才触发规则,不会匹配子路径- 正则
^/xx/?$同样只匹配/xx和/xx/这两个路径
这样配置后,用户访问domain.com/xx或domain.com/xx/会被正确重定向到/xx/zzzzz,而访问/xx下的其他子目录(比如/xx/aaa)不会受到任何影响,也不会出现重定向循环。
内容的提问来源于stack exchange,提问作者Bento de Espinosa
相关产品推荐
相关产品推荐

