2011-03-11 46 views
13

我一直在尋找mod_rewrite中的[NE](noescape)標誌。經過一番思考,我無法弄清楚當我想不是想要使用該標誌的情況。意思是,幾乎每個RewriteRule都保持啓用標誌似乎最有幫助。不調用這個標誌在幾種情況下導致了我的問題。mod_rewrite NE標誌 - 什麼時候對URL中的特殊字符進行編碼會有幫助?

我處理的大部分規則都是HTTP重定向([R]),而不是通過。

有人會對有所瞭解嗎?如果有mod_rewrite對URL進行編碼會有幫助嗎?

是否啓用此標誌或使用允許mod_rewrite轉義這些特殊字符的默認行爲通常是很好的做法?爲什麼?

+3

偉大的問題,我很驚訝,你還沒有答案。而且我甚至更驚訝地發現,幾十個關於www到非www重定向的答案(反之亦然)並沒有在'RewriteRule'中添加'[NE]'。你保存了我的一天,我無法理解爲什麼我的url在mod_rewrite重定向過程中被編碼了兩次。 +1 –

回答

1

[NE]標誌在將請求url添加爲 - 假設 - 授權簽名的一部分時非常有用。

我剛剛有一個錯誤,授權與.htaccess關閉,但沒有與它一起工作。事實證明,原因是重定向是URL編碼最後在php $_GET參數中的項目。爲了解決我改變了錯誤:

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^(.*[^/0-9])$ $1/ [R=301,L] 

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^(.*[^/0-9])$ $1/ [NE,R=301,L] 

(授權簽名是由許多事情,其中​​之一就是請求的URL)

+2

Downvoter,有何評論? –

+2

*「有人會對'當mod_rewrite編碼URL有幫助嗎?'有幫助嗎?」* – 5ervant

+0

@Servant -I回答了爲什麼要這樣做的一部分:「啓用此標誌或使用此標誌通常是好的做法嗎?允許mod_rewrite轉義這些特殊字符的默認行爲?爲什麼?「舉一個例子。 - 基本上分享使用此標誌的經驗。 –

3

如果你看一下source code for mod_rewrite ,如果啓用了noescape,您會注意到它會設置一個proxy-nocanon標誌。

revision where that line was first added,它也包含此評論:

確保mod_proxy_http不規範化的URI,並保存在文件名mod_proxy_http任何(可能qsappend'd)查詢字符串:proxy_http_canon( )

從繼,如果你看過mod_proxy documentation,你會看到的nocanon以下提到的:

通常情況下,mod_proxy將規範ProxyPassed URL。但是這可能與某些後端不兼容,特別是那些使用PATH_INFO的後端。可選的nocanon關鍵字抑制了這一點,並將URL路徑「raw」傳遞給後端。請注意,這可能會影響後端的安全性,因爲它會消除代理提供的基於URL的攻擊的正常有限保護。

我可能是錯誤的,但暗示對我來說,在mod_proxy的使用nocanon(並通過mod_rewrite的延伸noescape)具有潛在的安全後果。這可以解釋爲什麼它在默認情況下被禁用,即使認爲它在大多數情況下啓用它會更有用。