.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
感覺這個方法不太實用,改動太大了