使用Rewrite规则重定向后出现站点xxx重定向次数过多问题求助
重定向循环问题排查与解决
问题原因
你的规则触发了循环重定向,核心原因是:服务器大概率存在内部重写逻辑,会把/news/xxx/这类路径转回带category参数的/news/?category=xxx&key=news-category。此时内部重写后的请求会再次匹配你的RewriteCond条件,触发重定向跳回/news/xxx/,往复形成循环。
另外,原规则仅检查查询参数,没有区分外部实际请求和内部重写后的请求,导致内部请求也被错误触发重定向。
解决方案
修改重写规则,通过%{THE_REQUEST}变量匹配原始请求行,确保只对外部发来的带参数请求生效,避免内部重写触发循环:
RewriteCond %{THE_REQUEST} ^GET\ /news/\?category=([^&]+)&key=news-category\ HTTP/ RewriteRule ^news/$ /news/%1/? [R=301,L]
规则说明
%{THE_REQUEST}记录客户端发送的原始请求行,不会被内部重写规则修改,能精准匹配外部用户的带参数请求。- 末尾的
?用于清除重定向后的查询字符串,避免参数残留。 R=301表示永久重定向,L表示终止后续规则处理。
内容的提问来源于stack exchange,提问作者Lost Svan
相关产品推荐
相关产品推荐

