2014-01-11 75 views
1

我使用以下mod_rewrite.htaccess文件從的.htaccess mod_rewrite的爲https://subdomain.domain.com到https://www.subdomain.domain.com

永久

重定向我的域名

https://domain.com

https://www.domain.com

RewriteCond %{HTTPS} off 
RewriteCond %{HTTP_HOST} !^www\. 
RewriteRule ^(.*)$ https://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301] 

我應該如何mod_rewrite的從

https://subdomain.domain.com

重定向我的子域名

https://www.subdomain.domain.com

我的意思是我如何可以重定向三級域名從https://https://www.使用.htaccess mod_rewrite?

謝謝,

回答

1

將您的第一條規則更改爲以下內容。這應該將瀏覽器重定向到1跳中正確的URL。在第二種情況下,我們匹配www.(如果它位於url的前面),或者第一個捕獲組中沒有任何內容,以及第二個捕獲組中保留的所有內容。這看起來可能與直覺相反,但這確保我們在url的前面沒有兩次www.,但是如果主機名尚未存在,也可以預先配置www.RewriteRule ^只是寫出「匹配所有內容」的奇特方式(或者:「匹配每一個開始的字符串」,甚至是空字符串的情況)。

RewriteCond %{HTTPS} off 
RewriteCond %{HTTP_HOST} ^(www\.|)(.*)$ 
RewriteRule^https://www.%2%{REQUEST_URI} [L,R=301] 

然後,你需要第二個規則來處理那些已經在HTTPS請求:

RewriteCond %{HTTP_HOST} !^www\. 
RewriteRule^https://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301] 
+0

mod_rewrite不起作用。它無法重定向url並顯示證書錯誤。謝謝, –

+0

這不是'mod_rewrite'的問題,這是您的證書有問題。更具體地說:您的證書可能用於'sub.example.com',並且當您嘗試將它用於'www.sub.example.com'時,您會收到警告,表明該網站具有無效證書。 – Sumurai8

+0

@anubhava所有的證書都是爲了我的域名和子域名而發佈的。字首。使用我在我的問題中發佈的代碼將我的域名https://重定向到https://www.'時,我沒有收到任何錯誤。只有當我重定向我的子域時纔會出現問題。任何想法? –

1

這個單一規則應該處理你的主,子域都:

RewriteCond %{HTTP_HOST} !^www\. [NC] 
RewriteCond %{HTTPS}s on(s)| 
RewriteRule^http%1://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L,NE] 

確保它被作爲第一條規則放置在DocumentRoot/.htaccess

+0

mod_rewrite無法正常工作。它無法重定向url並顯示證書錯誤。謝謝, –

+0

警告仍然會出現,因爲在執行'mod_rewrite'規則之前會發生SSL證書協商。 – anubhava

+0

所有的證書都是爲我的域名和子域名而發佈的。字首。使用我在問題中發佈的代碼將我的域名從https://重定向到https:// www.'時,我沒有收到任何錯誤。只有當我重定向我的子域時纔會出現問題。任何想法? –