.Htaccess规则将HTTP和HTTPS的相应HTTP链接重定向到HTTPS?

时间:2011-10-09 17:18:58

标签: http .htaccess mod-rewrite https

首先,这是我目前使用的.htaccess规则:

Options +FollowSymLinks
RewriteEngine on
RewriteRule (.*) http://example.com/$1 [R=301,L]

这很棒,并将旧域的每个链接重定向到新域中的相应链接。也就是说,http://olddomain.com/1.html被重定向到http://example.com/1.html,依此类推。

但它不会将https://olddomain.com/1.html重定向到https://example.com/1.html

只是你知道我试过,下面是我也碰巧测试的规则。不幸的是,他们正在创建某种循环,并且重定向不起作用。

Options +FollowSymLinks
RewriteEngine on
RewriteRule (.*) example.com/$1 [R=301,L]

Options +FollowSymLinks
RewriteEngine on
RewriteCond %{SERVER_PORT} ^443$ [OR]
RewriteCond %{HTTPS} =on
RewriteRule (.*) example.com/$1 [R=301,L]

那么,有人可以给我规则将http页面重定向到http和https页面到https吗?感谢。

2 个答案:

答案 0 :(得分:0)

您的HTTPS重写错误。 Cond是一个正则表达式,而不是质量测试。它应该是

RewriteCond %{HTTPS} !^on

%{HTTPS} var只会包含onoff。从不=on,因此匹配失败并触发重定向,即使https确实已启用。


更新

对于无条件HTTP-> HTTPS重定向,您需要重定向到https网址。您的版本只检测HTTPS是否为* OFF ,然后重定向到同一个网址,从而导致循环。你需要的是:

RewriteCond %{HTTPS} !^on
RewriteRule (.*) https://example.com/$1 [R=301,L]

答案 1 :(得分:0)

#if https on
RewriteCond %{HTTPS} on
RewriteRule ^(.*)$ https://example.com/$1 [R=301,L]
#else
RewriteRule ^(.*)$ http://example.com/$1 [R=301,L]