2013-10-11 55 views
1

HTTPS我對我在.htaccess網站下面的代碼重寫所有請求.https重寫造成阿帕奇遞歸誤差垃圾網址

RewriteCond %{HTTPS} off 
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301] 
RewriteCond %{HTTP_HOST} !^www\. 
RewriteRule ^(.*)$ https://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301] 

一般情況下會就好了。現在解決問題。如果我提交了一個垃圾網址,說:domain.com/../../../../etc/psswd,modsecurity會做它的事情,併發出403錯誤代碼。同樣在.htaccess中,我有幾個ErrorDocument指令,其中包括一個用於403的問題。但問題是,特別是當我使用iPad或iPhone,但筆記本電腦有時也會這樣做時,瀏覽器將顯示(對於上述垃圾網址),403錯誤和額外的聲明,說明在嘗試使用ErrorDocument時出現500錯誤。

apache error_log提供以下錯誤:'由於可能的配置錯誤,請求超過了10個內部重定向的限制。'

如果我在.htaccess中註釋掉上述兩個RewriteRules,問題就會消失,但是我不會重定向到https。令人沮喪的是,這似乎並不總是發生。我相信這是因爲我對https的兩次重寫正在遞歸循環中捕獲這些垃圾郵件,我只是不知如何修復它並保留我的重寫爲https。

回答

0

同時擁有你的規則是這樣用一個附加條件:

RewriteCond %{ENV:REDIRECT_STATUS} ^$ 
RewriteCond %{HTTPS} off 
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301] 

RewriteCond %{ENV:REDIRECT_STATUS} ^$ 
RewriteCond %{HTTP_HOST} !^www\. 
RewriteRule ^(.*)$ https://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301] 

並確保這些規則的權利之上的所有其他規則之前。

新條件%{ENV:REDIRECT_STATUS} ^$將在ErrorDocument指令觸發後跳過這兩條規則。

+0

感謝您的支持。它sort've工作,但造成一個有趣的問題。如果我把網址作爲https +垃圾網址,它一切正常。但是,如果我把URL作爲http +垃圾網址出現錯誤頁面,但沒有樣式或圖像,但源代碼顯示鏈接是正確的。即使他們似乎指向了正確的目標,鏈接也不起作用。 – Cbomb

+0

好的,現在你已經遇到了人們在切換到漂亮的URL方案時最常見的問題:P解決方案也很簡單,只需在你的css,js,圖像文件中使用絕對路徑而不是相對路徑。這意味着你必須確保這些文件的路徑以'http://'或斜槓'/'開始。 – anubhava

+0

就是這樣,我有根目錄的斜槓。網絡登錄IE開發者工具顯示所有關於css,圖片和js被中止的請求。只有當我在URL中使用http時纔會發生。如果我使用https,它工作正常。 – Cbomb