2013-07-11 122 views
0

我想重定向重定向HTTP和HTTPS正確htaccess的

http://www2.mydomain.com/some-filename.phphttp://newmydomain.com/some-filename.phphttps://www2.mydomain.com/some-filename.phphttps://newmydomain.com/some-filename.php

我 「www2.mydomain.com」 域沒有有效的SSL,但仍如果用戶訪問https,那麼我需要使用https將他重定向到新域。

我在.htaccess中編寫了下面的代碼,但它總是重定向到HTTP

<ifModule mod_rewrite.c>  

    RewriteEngine On 

    RewriteCond %{HTTPS_HOST} ^www2\.mydomain\.com$ [NC] 
    RewriteRule ^(.*)$ https://newmydomain.com/$1 [L,R=301] 

    RewriteCond %{HTTP_HOST} ^www2\.mydomain\.com$ 
    RewriteRule ^(.*)$ http://newmydomain.com/$1 [L,R=301] 

</ifModule> 

請讓我知道我在做什麼錯,以及做這種重定向的正確代碼是什麼。

回答

1

您不檢查傳入請求是否是HTTPS。你可以用一個巧妙的一點正則表達式分組兩者結合起來:

<ifModule mod_rewrite.c> 
    RewriteEngine On 

    RewriteCond %{HTTP_HOST} ^www2\.mydomain\.com$ [NC] 
    RewriteCond %{HTTPS}:s (on:(s)|off:s) 
    RewriteRule ^(.*)$ http%2://newmydomain.com/$1 [L,R=301] 

</ifModule> 

沒有一個%{HTTPS_HOST}變量,因爲它是「主持人:」請求域。所有的%{HTTP_(something)}變量都是請求字段,例如%{HTTP_USER_AGENT}%{HTTP_COOKIE},%{HTTP_REFERER},都是請求字段; User-Agent:Cookie:Referer:

第二條件檢查是否該請求是HTTPS與否,如果是這樣(on),它捕獲的「S」,這是由%2反向引用,從而重定向轉向https://,否則,只是http://

+0

這是行之有效的,但我有一個更多的要求,我剛纔知道,我們需要將某些特定的URL重定向到新域的不同位置。比如'https:// www2.mydomain.com/myapp'到'https:// newmydomain.com/NEWmyapp'等等。如何用你建議的當前htaccess規則來做到這一點,或者我發現的一種方法是複製三行併爲所有特定的url創建它?請指教? – Prashant

+0

完成後,我在'RewriteCond%{HTTP_HOST}^www2 \ .mydomain \ .com $ [NC]'行上面添加了這條規則'RewriteRule^myapp // NEWmyapp/[L,R = 301]'並且它正在工作。這是對的嗎? – Prashant

+0

@Prashant是的,沒關係。如果你有多個重定向,你通常需要比較一般的重定向更具體的重定向。 –