2013-08-02 61 views
1

將www重定向到非工作正常,但是將所有出現的%2520轉換爲空格時,使用QUERY_STRING似乎在將它們合併時失敗。 我已經Google和負責結合RewriteCond和RewriteRule的負載,但我找不到一個例子,甚至似乎接近這個工程。我所做的一切就是我可能會濫用(。*)正則表達式。正則表達式和mod_rewrite noob在這裏 - 沒有諷刺評論請:-)提前致謝!mod rewrite刪除www並將%2520轉換爲空格

我已經試過這一點,相反的:

RewriteCond %(HTTP_HOST) ^www.mywebsite\.com$ 
RewriteRule (.*) http://mywebsite.com/$1 [R=301,L] 
RewriteCond %{QUERY_STRING} ^(.*)(%2520)(.*)$ 
RewriteRule ^(.+)$ $1?%1\ %3 [N,R=301] 

回答

1

的URL都有它允許有限的字符集。空格不允許作爲url中的字符,因此它們被編碼爲%20。 Similary,%2520是一個雙重編碼空間。

您提供的規則對我來說可以很好地工作(您可以在%2520左右避開捕獲組,因爲這是不必要的,但它不會破壞任何東西)。它會將http://example.com/minimalonecharacter?asdf%2520qwer轉換爲http://example.com/minimalonecharacter?asdf%20qwer

我注意到你使用狀態碼301(永久重定向)。我建議使用而不是進行永久性重定向測試,直到所有內容都按照您希望的方式工作。瀏覽器可能會緩存永久重定向,從而跳過對服務器的請求。如果你製作了一個錯誤的重寫代碼,這個結果被緩存,而未來的嘗試「奇怪」指向你的第一次嘗試。

+0

不幸的是:RewriteRule ^(。+)$ $ 1?%1(%20)%3 [N,R = 301]仍然不起作用,因爲我的規則不會合並。它忽略了四者中的最後兩個陳述。無論如何,我從一個工作示例中得到了最後兩條規則。是否有人知道如何使前兩個和最後兩個一起工作? – ChrisAdmin

+0

用301 ..歡呼好心情 – ChrisAdmin