0

我想重定向

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>

请让我知道我做错了什么以及进行这种重定向的正确代码是什么。

4

1 回答 1

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://

于 2013-07-11T09:06:10.570 回答