2017-05-04 32 views
1

我想使用.htaccess重定向domain1.comdomain2.com,並強制執行www和https。我已經看到了這個問題的部分答案,但沒有,對於這些案件全部7個工作:.htaccess將HTTP [S]://domain1.com重定向到HTTPS://WWW.domain2.com

源URL

  1. http://domain1.com
  2. http://www.domain1.com
  3. http://domain2.com
  4. http://www.domain2.com
  5. https://domain1.com
  6. https://www.domain1.com
  7. https://domain2.com

TARGET URL:

https://www.domain2.com 

此代碼僅需要照顧上述1-4:

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

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

domain1.comwww.domain1.com,和domain2.com被設置爲在別名Apache虛擬主機文件。我也嘗試在主機文件中使用RedirectMatch,但我無法正常工作。

+0

我認爲他的問題更適合http://serverfault.com而不是SO。 – reporter

+0

您的SSL證書是否包含所有4個名稱:domain1.com,www.domain1.com,domain2.com和www.domain2.com? –

+0

SSL證書只有www.domain1.com和www.domain2.com。 –

回答

0

在虛擬主機中這樣做確實會更高效。 (domain1.com在理想情況下被設置爲一個單獨的虛擬主機,並有無條件Redirect

不過,既然你已經標記了問題.htaccess,然後嘗試替代以下:

RewriteEngine On 
RewriteCond %{HTTP_HOST} ^www\.domain1\.com [NC,OR] 
RewriteCond %{HTTP_HOST} !^www\. [NC,OR] 
RewriteCond %{HTTPS} !on 
RewriteRule (.*) https://www.domain2.com/$1 [R=301,L] 

SSL證書只有www.domain1.comwww.domain2.com

如果你的SSL證書不包括頂點域domain1.com/domain2.com那麼你將無法重定向這些(#5和#7在你的列表中)。 (這與您是在主服務器配置中執行此操作還是.htaccess)無關。在發生任何重定向之前,SSL握手首先發生,並且用戶在到達您的站點之前會在其瀏覽器中出現錯誤。

+0

謝謝。我嘗試過這種方法,但對於5-7例,它仍然無法正常工作。也許我應該將這些apex域添加到來自虛擬主機的證書和重定向。 –

+0

我剛剛更新了我的答案來處理#6(對不起,這個邏輯在前面得到了迴應)。但是...是的,除非您擁有涵蓋頂點域的SSL證書,否則5和7將不起作用。 – MrWhite

+1

輝煌,它的作品。謝謝! –

相關問題