RewriteRule删除查询字符串中的%2f

时间:2012-07-03 12:36:19

标签: apache .htaccess rewrite

我有一堆未命中的网址,我想将其重定向到正确的网址。

这是一个很好的例子:

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]

据我了解,这只能起作用,因为删除了尾随的“%2F”,然后规则再次点击。 Google只接受有限数量的重定向。

所以我尝试调整规则以使用一次或多次“%2f”

这是我有多远:


    RewriteCond %{QUERY_STRING} ^(.*)((%2F)*)
    RewriteRule ^search/$ /search/?%1 [NE,R=301,L]

结果如下: / search /?q = searchtermFFFFFFFFFFFFFFFF& scope = 45FFFFF /

我缺少什么?

祝你好运, 亚历山大

1 个答案:

答案 0 :(得分:1)

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

# %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]

希望有所帮助。