使用 .htaccess 参数重写防止重定向循环

使用 .htaccess 参数重写防止重定向循环

首先我要声明,我并不是 .htaccess 或 Apache 专家。但我需要在 URL 查询的末尾附加一个散列项。

例如:

http://www.example.com/?query_string=stuff

变成

http://www.example.com/?query_string=stuff#otherstuff

我正在使用以下规则(整个 .htaccess 文件):

RewriteCond %{QUERY_STRING} ppw_confirm=(.*)
RewriteRule ^/?(.*) http://www.example.com/?ppw_confirm=%1#go [NE,L]

问题

在参数字符串末尾添加 #go 后,.htaccess 文件仍会读取 ?ppw_confirm= 查询。然后,它会尝试执行第二次重定向,随后进入无限循环。

我搜索了好几个小时,但毫无收获。基本上,我需要一种方法来防止 .htaccess 重写两次,从而防止这种无限循环。

欢迎任何及所有的建议:)

非常感谢您的帮助。提前致谢!

答案1

您根本无法在重写规则中使用这个#go部分;它是客户端的,在请求该资源时不会发送到服务器,因此您无法根据它在规则中做出决策。

也许作为重定向的一部分,向查询字符串添加一个附加变量,然后查找该变量并在存在时阻止重定向?

RewriteCond %{QUERY_STRING} ppw_confirm=(.*)
RewriteCond %{QUERY_STRING} !r=1
RewriteRule ^/?(.*) http://www.example.com/?ppw_confirm=%1&r=1#go [NE,L]

相关内容