2011-06-14 107 views
16

我試圖強制用戶被重定向到非www網站,並強制https。強制非www和https通過htaccess

我有這種工作,但不強制https,當輸入http。

RewriteEngine On 
RewriteCond %{HTTPS} off 
RewriteRule ^(.*)$ https://site.com\.net/$1 [R=301,L] 
RewriteCond %{HTTP_HOST} ^www\. 
RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R=301,L] 

關於我在做什麼的錯誤?

回答

26

試試這個規則:

RewriteCond %{HTTP_HOST} ^(www\.)(.+) [OR] 
RewriteCond %{HTTPS} off 
RewriteCond %{HTTP_HOST} ^(www\.)?(.+) 
RewriteRule^https://%2%{REQUEST_URI} [R=301,L] 
+0

當我從上面接受的答案中使用htaccess訪問「https:// www.mydomainname.co.uk」時,我從瀏覽器中得到舊的「Connected is untrusted」消息。 'http:// mydomainname.co.uk'和'http:// www.mydomainname.co.uk'都重定向罰款。我的證書是爲'mydomainname.co.uk'生成的。任何想法(或您需要的更多信息)? – Jon 2011-07-27 09:12:28

+0

@Jon:TLS/SSL層位於HTTP之上(HTTPS也稱爲「HTTP over TLS/SSL」)。因此,建立TLS/SSL連接並驗證證書,然後將其傳遞到HTTP並進行HTTP重定向。你無法解決這個問題。 – Gumbo 2011-07-28 16:08:08

+0

感謝您的更新,只是爲了確認 - 有**沒有**解決? (根本不知道,或者你知道的?) – Jon 2011-07-29 09:11:47

3

基於甘博的評論:「在TLS/SSL連接建立,它是流傳下來的HTTP之前和HTTP重定向需要在驗證證書的地方」 我給這一個嘗試(這似乎工作):

RewriteEngine On 
RewriteCond %{SERVER_PORT} 80 
RewriteRule ^(.*)$ https://www.blahblah.com/$1 [R,L] 

RewriteCond %{HTTP_HOST} ^www\.blahblah\.com [NC] 
RewriteRule ^(.*)$ https://blahblah.com/$1 [L,R=301] 

請告訴我,如果這種方法有什麼問題。

0

唯一的一套對我的作品的規則如下

# match any URL with www and rewrite it to https without the www 
    RewriteCond %{HTTP_HOST} ^(www\.)(.*) [NC] 
    RewriteRule (.*) https://%2%{REQUEST_URI} [R=301,L] 

# match non https and redirect to https 
    RewriteCond %{HTTP:X-Forwarded-Proto} !https 
    RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R=301,L] 

的順序問題,它可以防止第三重定向在某些情況下。