我想重定向
http://www2.mydomain.com/some-filename.php
到http://newmydomain.com/some-filename.php
和
https://www2.mydomain.com/some-filename.php
至https://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>
请让我知道我做错了什么以及执行此类重定向的正确代码是什么。
答案 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://
。