Apache mod_rewrite规则问题导致无限循环

vshtjzan  于 7个月前  发布在  Apache
关注(0)|答案(2)|浏览(74)

我们必须从这个URL重定向:
https://www.ourdomain.com/event/just-an-event-600922?test=620c3c875ceb1ae584920c04d02bc083
在没有查询字符串的情况下:
https://www.ourdomain.com/event/just-an-event-600922
我们已经尝试了RewriteCond和RewriteRule的组合:

RewriteCond %{QUERY_STRING} ^test=([A-Za-z0-9]+)$
RewriteRule ^event/just-an-event-600922$ https://www.ourdomain.com/event/just-an-event-600922 [L,R=301]

但它显然会导致一个无限循环。有办法解决吗

zd287kbt

zd287kbt1#

你很接近了,但你错过了最后的?。实际上,在重定向时会自动追加查询字符串,从而导致循环。通过使用?,您可以重置查询字符串。
所以,你的解决方案是:

RewriteCond %{QUERY_STRING} ^test=[A-Za-z0-9]+$
RewriteRule ^(event/just-an-event-600922)$ /$1? [L,R=301]

注1:你不需要通过使用括号来匹配和记住test值,因为你不使用它。
注意2:你可以匹配RewriteRule,这样你就不需要为重定向目标再写一次了(注意最后的?,这实际上是你最初问题的关键)。

xurqigkl

xurqigkl2#

您可以删除R=301,然后它不会将浏览器重定向到新的URL,而是在内部重写它并使用新的查询字符串调用您的Web应用程序。
另一个选择是简化它:

RewriteRule ^test=([A-Za-z0-9]+)$ /event/just-an-event-600922 [L,R=301]

相关问题