天天看點

Apache 關于 mod_rewrite 遇到 %2F或%5C (正反斜杠)等特殊符号導緻URL重寫失效出現404的問題

.htaccess 檔案

http://localhost/application/home/index/index/url/http%3a%2f%2fwww.domain.com%2fpage%2f

當通路上面連結時,老是出現 404,重寫失效了

http://localhost/application/home/index/index/url/http://www.domain.com/page/

我本地環境一直使用的 xampp ,伺服器上的 nginx 沒有問題,但 apache 卻很讓人無語,老是 404,換成原樣,不經過 urlencode 反而能正常打開頁面

網上搜尋了半天,終于找到原因: 

當url和path_info中出現%2f(/)或者%5c(\), 會被認為這是個不合法的請求, apache将會直接傳回"404 (not found)"錯誤。

也就是說,apache在調用 mod_proxy 或 mod_rewrite 子產品之前,就直接拒絕請求,給出404錯誤。

這樣做主要是為了防止cgi的安全漏洞發生,尤其是在腳本中使用了path_info但是又沒有做安全過濾操作的話,很容易被注入漏洞。

解決辦法有兩個,第一個比較簡單,但需要有伺服器操作的權限:

一、修改站點虛拟目錄的配置

配置中增加 allowencodedslashes on 這句話後重新開機服務即可

二、多次 urlencode 

可以将連結多次 urlencode ,一般兩次,或者三次就不會有問題了。

我做了個測試,發現必須要三次才能成功

http://localhost/application/home/index/index/url/http%25253a%25252f%25252fwww.domain.com%25252fpage%25252f

感覺這個方法不太實用,改動太大了

繼續閱讀