2011-06-29 22 views
45

我們有一些非常基本的mod_rewrite規則:mod_rewrite urlencoding已經urlencoded查詢字符串參數 - 任何方式來禁用此?

RewriteRule ^something.swf$ http://www.newdomain.com/something.swf [R=302,L] 

的mod_rewrite似乎做的工作,如果用戶訪問:

something.swf?param=value,它被正確重定向到http://www.newdomain.com/something.swf?param=value

問題在這種情況下:

www.olddomain.com/something.swf?param=URL_ENCODED_VALUE 

結果發生的是mod_rewrite它在它的自我重新進行urlencode查詢字符串PARAM

有啥用戶與結束是:

www.olddomain.com/something.swf?param=URL_ENCODED_VALUE 

重定向到

www.newdomain.com/something.swf?param=URL_ENCODED_VALUE_OF_URL_ENCODED_VALUE 

,所以我們結束了一個雙url編碼值。 boourns!

雖然我明白我們可以做一個\?(.*) ... ?$1規則爲此,我想一定有辦法告訴mod_rewrite不urlencode查詢字符串參數...我們想避免使用2規則因爲有效路徑是:

something.swf (no query string) 

something.swf?someparams... 

所以啊,最好...只是告訴mod_rewrite的:請,沒有查詢字符串則params的URL編碼......通過直接剛中繼到新網址R=302

+2

doh!答案是NE參數。抱歉! –

+2

就是這樣。您能否提供答案並將其標記爲已接受? (我猜這樣做有時間限制,但請儘快去做:P) –

+0

yea說我需要100位代表在不到8小時內回答我自己的問題。稍後會回答。 –

回答

89

完成這一任務的方法是通過NE(沒有逃逸)paramater。

RewriteRule ^something.swf$ http://www.newdomain.com/something.swf [R=302,L] 

其實應該讀

RewriteRule ^something.swf$ http://www.newdomain.com/something.swf [R=302,NE,L] 

這將迫使mod_rewrite的給所有的查詢字符串值,因爲他們,沒有做任何編碼/逃脫。

就這麼簡單:)

+0

固定我的問題還有,謝謝! – Teekin

+0

實際上可能存在與此相關的錯誤。除非URL的路徑段中包含URL編碼字符,否則NE是一個不錯的選擇。請參閱:http://serverfault.com/questions/331899/apache-mod-rewrite-double-encodes-query-string-on-redirect – Ryan

相關問題