Apache 重写规则以删除查询字符串中的%2f

Apache 重写规则以删除查询字符串中的%2f,apache,.htaccess,rewrite,Apache,.htaccess,Rewrite,我有一堆未命中生成的URL,我想将它们重定向到正确的URL 这是一个很好的例子: http://example.com/search/?q=searchterm%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F&scope=45%2F%2F%2F%2F%2F/ 我已经可以使用以下规则重定向其中的大多数: RewriteCond %{QUERY_STRING} ^(.*)%2F RewriteRule ^search/$ /searc

我有一堆未命中生成的URL,我想将它们重定向到正确的URL

这是一个很好的例子:

http://example.com/search/?q=searchterm%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F&scope=45%2F%2F%2F%2F%2F/
我已经可以使用以下规则重定向其中的大多数:

RewriteCond %{QUERY_STRING} ^(.*)%2F RewriteRule ^search/$ /search/?%1 [NE,R=301,L] 重写条件%{QUERY_STRING}^(.*)%2F 重写规则^search/$/search/?%1[NE,R=301,L] 据我所知,这只适用于删除尾随“%2F”,然后再次命中规则。谷歌只接受有限数量的重定向

因此,我尝试调整规则以处理“%2f”的一次或多次出现

这就是我取得的成绩:

RewriteCond %{QUERY_STRING} ^(.*)((%2F)*) RewriteRule ^search/$ /search/?%1 [NE,R=301,L] 重写条件%{QUERY_STRING}^(.*)((%2F)*) 重写规则^search/$/search/?%1[NE,R=301,L] 结果是: /搜索/?q=SearchTermFFFFFFFFFFFF&scope=45FFFFF/

我错过了什么

致以最良好的祝愿,
Alexander

如果您只有两个查询参数,这可能会起作用(当然,如果您有更多或更少的查询参数,则可以进行调整):


希望这会有所帮助。

这是可行的,但重写之后,当所有“%2F”都被删除时,该条件仍然有效。我在开始时添加了第二个条件,这似乎有效<代码>重写cond%{QUERY_STRING}([^%2F]*)[%2F]
# %1 Matches everything until the first group of %2F
# %2 Matches everything after the first group %2F until the second group
RewriteCond %{QUERY_STRING} ([^%2F]*)[%2F]*([^%2F]*)[%2F]*
RewriteRule ^search/$ /search/?%1%2 [NE,NC,R=301,L]