2015-05-01 46 views
1

我試圖使用我的網站的.htaccess文件來重寫主域的所有URL來強制HTTPS,而任何子域上的所有URL都應該被強制使用HTTP。Force https主域名和http所有子域名

目前,我有以下幾點:

RewriteEngine On 
RewriteCond %{HTTPS} off 
RewriteCond %{HTTP_HOST} !=([a-z0-9-]+).domain.com 
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} 

這迫使HTTPS在主域(https://domain.com)以及所有子域。我想我在第三行有點搞砸了,但是還不能完全弄清楚需要去哪裏。

此外,我認爲第三行只會將重寫規則中的子域從排除規則中排除到HTTPS,但是如果有人點擊https://sub.domain.com中的鏈接或類型,它們仍可能會通過並導致不安全的內容警告。那裏可能還需要另一個條件?

回答

1

形式爲RewriteCond variable =string的條件會將變量與詞法字符串(或換言之:字符串原樣)進行比較,而不是正則表達式。據推測RewriteCond variable !=string將意味着不是那個字符串。

你想比較一個正則表達式而不是第二個規則。第一條規則很簡單,因爲我們已經知道整個域名。

RewriteCond %{HTTPS} off 
RewriteCond %{HTTP_HOST} =domain.com 
RewriteRule^https://%{HTTP_HOST}%{REQUEST_URI} [R,L] 

RewriteCond %{HTTPS} on 
RewriteCond %{HTTP_HOST} ^.+\.domain\.com$ 
RewriteRule^http://%{HTTP_HOST}%{REQUEST_URI} [R,L] 

更改R標誌R=301一旦你已經測試一切正常。

我相信當用戶去https://sub.domain.com,它仍然會產生安全警告。這是因爲如果證書無效,瀏覽器將不會完成握手。它會提示用戶該連接可能被劫持,併爲用戶提供繼續的選項。如果用戶繼續用戶重定向,並且不顯示安全警告。 確保在任何地方都沒有https域名到您的子域名!

+0

我編輯了一些關於https-to-http-redirect的更多信息。 – Sumurai8

+0

我希望能夠避免你提到的安全警告,但我正在看我的網站,並且沒有直接鏈接到https的子域名,所以有人會以這種方式到達那裏的唯一方法是如果他們手動輸入「https:// sub.domain.com」,此時這是他們的問題。謝謝! – ScottD

相關問題