2013-07-11 124 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是的,没关系。如果你有多个重定向,你通常需要比较一般的重定向更具体的重定向。 –