在htaccess中正确重定向HTTP和HTTPS

时间:2013-07-11 08:57:13

标签: apache .htaccess mod-rewrite

我想重定向

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 个答案:

答案 0 :(得分: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}变量,因为它是“Host:”请求字段。所有%{HTTP_(something)}变量都是请求字段,例如%{HTTP_USER_AGENT}%{HTTP_COOKIE}%{HTTP_REFERER}都是请求字段; User-Agent:Cookie:Referer:

第二个条件检查请求是否为HTTPS,如果是(on),它会捕获由%2反向引用的“s”,从而将重定向转为{{1 }},否则只是https://