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

问题描述 投票:0回答:2

我们必须从此 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]

但它显然会导致无限循环。知道如何解决这个问题吗?

apache mod-rewrite
2个回答
0
投票

你已经很接近了,但你错过了最后的

?
。实际上,在重定向时会自动附加查询字符串,从而导致循环。通过使用
?
,您可以重置查询字符串。

那么,你的解决方案:

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

注 1:您不需要使用括号来匹配和记住

test
值,因为您不使用它。

注2:你可以匹配RewriteRule,这样你就不需要为重定向目标再写一次(注意最后的

?
,这确实是你最初问题的重点)。


-1
投票

您可以删除

R=301
,那么它不会将浏览器重定向到新的 URL,而是在内部重写它并使用新的查询字符串调用您的 Web 应用程序。

另一种选择是简化它:

RewriteRule ^test=([A-Za-z0-9]+)$ /event/just-an-event-600922 [L,R=301]
© www.soinside.com 2019 - 2024. All rights reserved.