RewriteEngine on RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^(.*)$ index">
.htaccess 文件
當訪問上面鏈接時,老是出現 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
感覺這個方法不太實用,改動太大了