2014-06-08 109 views
0

我想將http://domain.com重定向到https://www.domain.com。我成功地重定向httphttps像這樣(在default-ssl.conf文件):使用https連接重定向非www的http請求www域

<VirtualHost domain.com:80> 
    RewriteEngine on 
    ReWriteCond %{SERVER_PORT} !^443$ 
    RewriteRule ^/?(.*) https://%{HTTP_HOST}/$1 [NC,R,L] 
</VirtualHost> 

<VirtualHost _default_:443> 
    RewriteEngine on 
    ServerAdmin [email protected] 
    ServerName domain.com:443 
    ServerAlias www.domain.com 
    DocumentRoot /var/www/html 
</VirtualHost> 

但是,當我不www鍵入我的域名,我得到錯誤信息This site is untrusted, the certificate is only valid to <www.domain.com>

我試圖在網絡上許多提出瞭解決方案,但它不起作用。 我的環境:

  • 的Ubuntu 14.04
  • 的Apache2
  • 爲< 「www.domain.com」>(通用名)頒發的SSL
+0

我不知道爲什麼我放棄投票,但無論如何感謝:) – Engineeroholic

+0

我沒有downvote,但我想這是downvoted,因爲你可能沒有足夠的努力,現有的答案。如果您搜索本網站(頁面右上角)「www非www證書重定向」(甚至G​​oogle),您會發現一些非常相似的問題(如果不是精確重複的),特別是[這一個,作爲第一個結果](http://stackoverflow.com/a/10726167/372643),雖然不是嚴格的重複,但它有一個答案,告訴你爲什麼你會得到這個證書錯誤信息。 – Bruno

+0

這是完美的伴侶:)但相信我我在過去3天搜索了一個答案,我在這裏找到的答案是唯一的工作。這可能會幫助其他人在未來,誰知道! – Engineeroholic

回答

1

更改http(鍋80)配置:

<VirtualHost domain.com:80> 
    RewriteEngine on 
    ReWriteCond %{SERVER_PORT} !^443$ 
    RewriteRule ^/?(.*) https://%{HTTP_HOST}/$1 [NC,R,L] 
</VirtualHost> 

對此將做一個組合檢查httpswww

<VirtualHost domain.com:80> 
    RewriteEngine on 
    RewriteCond %{HTTP_HOST} ^(www\.)(.+) [OR] 
    RewriteCond %{HTTPS} off 
    RewriteCond %{HTTP_HOST} ^(www\.)?(.+) 
    RewriteRule^https://%2%{REQUEST_URI} [R=301,L] 
</VirtualHost> 

這就是說,你還可能會得到This site is untrusted, the certificate is only valid to <www.domain.com>從最初的連接將是不正確的證書主機名。因此,它可能會更好既configs- httphttps -adjusted這樣做:

<VirtualHost domain.com:80> 
    RewriteEngine on 
    ReWriteCond %{SERVER_PORT} !^443$ 
    RewriteRule ^/?(.*) https://%{HTTP_HOST}/$1 [NC,R,L] 
</VirtualHost> 

<VirtualHost _default_:443> 
    ServerAdmin [email protected] 
    ServerName domain.com:443 
    ServerAlias www.domain.com 
    DocumentRoot /var/www/html 
    RewriteEngine on 
    RewriteCond %{HTTP_HOST} !^(www\.)?(.+) 
    RewriteRule^https://%2%{REQUEST_URI} [R=301,L] 
</VirtualHost> 

的想法是,在http連接上你根本重定向到https。然後在https連接上,你檢查是否設置www設置爲&相應地進行調整。

+0

感謝您的回覆隊友。不幸的是它沒有工作。現在它將www重定向到非www,即使我把重定向到(https://domain.com)。 也許如果你反規則它會工作(對不起,我不知道如何反轉條件規則,我不習慣這種類型的編碼XD) 謝謝 – Engineeroholic

+0

現在它的工作原理!我剛加了'!'之前^ www ... 非常感謝我的朋友!只有一件事仍然是錯誤的:當我輸入https:// domain .com而沒有「www」時=它給出不可信的鏈接警告。該案件的任何解決方案? 謝謝 – Engineeroholic

+1

@Engineeroholic「當我輸入;它會給出不可信的鏈接警告。這種情況下的任何解決方案?「我不這麼認爲,因爲任何與」https:// domain.com「的連接將始終加載與https:// www.domain.com'不匹配的證書。即使只有幾分之一秒,也需要進行連接,以便警告顯示出來。我提到,在我的回答中,當我說,「那麼說,你仍然可能得到...」 – JakeGould

相關問題