我们必须从此 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]
但它显然会导致无限循环。知道如何解决这个问题吗?
你已经很接近了,但你错过了最后的
?
。实际上,在重定向时会自动附加查询字符串,从而导致循环。通过使用 ?
,您可以重置查询字符串。
那么,你的解决方案:
RewriteCond %{QUERY_STRING} ^test=[A-Za-z0-9]+$
RewriteRule ^(event/just-an-event-600922)$ /$1? [L,R=301]
注 1:您不需要使用括号来匹配和记住
test
值,因为您不使用它。
注2:你可以匹配RewriteRule,这样你就不需要为重定向目标再写一次(注意最后的
?
,这确实是你最初问题的重点)。
您可以删除
R=301
,那么它不会将浏览器重定向到新的 URL,而是在内部重写它并使用新的查询字符串调用您的 Web 应用程序。
另一种选择是简化它:
RewriteRule ^test=([A-Za-z0-9]+)$ /event/just-an-event-600922 [L,R=301]