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

來源:互聯網
上載者:User

標籤:mod_rewrite   斜杠   url重寫失效   

.htaccess 檔案

<IfModule mod_rewrite.c> RewriteEngine on RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^(.*)$ index.php/$1 [QSA,PT,L]</IfModule>


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但是又沒有做安全過濾操作的話,很容易被注入漏洞。


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

一、修改網站虛擬目錄的配置

<VirtualHost *:80>    AllowEncodedSlashes On    DocumentRoot "D:/htdocs/localhost"    ServerName localhost</VirtualHost>


配置中增加 AllowEncodedSlashes On 這句話後重啟服務即可


二、多次 urlencode 

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

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

http://localhost/Application/Home/Index/index/url/http%25253A%25252F%25252Fwww.domain.com%25252Fpage%25252F

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










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

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.