2012-07-03 53 views
0

我有一串未命中的URL,我想重定向到正確的URL。RewriteRule刪除查詢字符串中的%2f

這是一個很好的例子:

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只接受有限數量的重定向。

所以我儘量去適應規則與1個或多個「%2F」

的工作這是我到目前爲止有:

 

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

的結果是: /搜索/? q = searchtermFFFFFFFFFFFFFFFF & scope = 45FFFFF/

我在想什麼?

最好的問候, 亞歷山大

回答

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] 

希望有所幫助。

+0

這是有效的,但條件在重寫後仍然爲真,當所有「%2F」被刪除時。 –

+0

我在開始時添加了第二個條件,這似乎工作。 'RewriteCond%{QUERY_STRING}([^%2F] *)[%2F]' –