2017-10-16 60 views
1

我似乎無法讓myredirects正常工作。我的目標是:www和https重定向不能按要求工作

  1. 重定向http://example.comhttps://www.example.com
  2. 重定向http://www.example.comhttps://www.example.com

目標1已已位於已經實現,但問題是重定向http://www.example.comhttps://www.example.com,其實際上導致到404錯誤。我用Ryte識別哪些是如下問題:

https://enmowe.com/ (403) is not reachable 
http://enmowe.com/ (301) is forwarding to https://www.enmowe.com/ (200) 
https://www.enmowe.com/ (200) is available 
http://www.enmowe.com/ (404) is not reachable 

我試圖在我的Apache虛擬主機如下:

方法1.

<If "%{HTTP_HOST} != 'www.enmowe.com'"> 
     Redirect "/" "https://www.%{HTTP_HOST}/$1" 
    </If> 

    <If "%{SERVER_PROTOCOL} != 'HTTPS'"> 
     Redirect "/" "https://www.%{HTTP_HOST}/$1" 
    </If> 

方法2

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

方法3

RewriteEngine on 
RewriteCond %{SERVER_NAME} =enmowe.com 
RewriteRule^https://www.%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent] 

有點兒感到失落,現在

+0

apache是​​否擁有www.enmowe.com的虛擬主機條目,因爲如果它沒有,那麼重寫規則不會觸發...... –

+0

www.enmowe.com已被設置爲虛擬主機中的ServerAlias –

回答

2

你想重定向如果協議是不正確的的主機名。所以,你要制定這兩個條件:

RewriteEngine On 

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

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

事實上,https://enmowe.com不可達根本不依賴於這一點。如果您希望它可以訪問並且擁有正確的證書,請將主機名作爲ServerAlias添加到https服務器的定義中。

順便說一句:請刪除virtual-hosts標記,因爲它與你的問題無關。

+0

謝謝,這隻適用於部分。它將url設置爲https:// www,當它的http:// enmowe ...或http://www.enmowe ...但是,https:// enmowe ...仍然不會重定向到https:/ /www.enmowe ... –

+0

這可能是由於我從你的問題中複製的正則表達式。我沒有測試。啓用[重寫調試](https://stackoverflow.com/questions/9632852/how-to-debug-apache-mod-rewrite)並查看第二個條件是否匹配。 – blafasel

+0

這是我在enmowe.com.com虛擬主機文件:! '上 的RewriteCond%RewriteEngine敘述{} HTTPS = ON [OR] 的RewriteCond%{HTTP_HOST} ^(WWW \ enmowe \。 com)?$ RewriteRule ^(。*)https://www.% {SERVER_NAME}%{REQUEST_URI} [END,NE,R =永久]' 這是基於你的回答。但是,仍然「https:// enmowe.com」似乎沒有被重定向。 我還補充: '的RewriteCond%{} HTTPS上 的RewriteCond%{HTTP_HOST} ^(WWW \ enmowe \ .COM。)$ 重寫規則^ HTTPS?(*):// WWW。%{SERVER_NAME}%{REQUEST_URI} [END,NE,R =永久]' 真的很奇怪。我爲'www.enmowe.com'創建了一個虛擬主機。 –

相關問題