http或http www到https www,只有一个重定向

时间:2016-10-16 08:27:25

标签: .htaccess redirect https

in .htacces我正在尝试重定向到https://www

这很好用

RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule .* https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
RewriteCond %{HTTP_HOST} !^www\.
RewriteRule .* https://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

但有2次重定向,我只想用1次重定向

我试过了

RewriteCond %{HTTPS} off [OR]
RewriteCond %{HTTP_HOST} !^www\.
RewriteRule .* https://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

它工作正常,但如果s被删除(步骤2)我得到2次www 1)https://www.domain.com - > 2)http://www.domain.com - > 3)https://www.www.domain.com

我该如何重定向?

 http://domain.com
 http://www.domain.com
 https://domain.com
to
 https://www.domain.com

只有一次重定向,无论发生什么错误

感谢您的帮助

1 个答案:

答案 0 :(得分:1)

这只进行一次重定向。是的,它仍然是两个规则,但只会执行一次重定向:

RewriteEngine On

RewriteCond %{HTTPS} off
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule ^ https://www.%{HTTP_HOST}%{REQUEST_URI} [L,NE,R=301,QSA]

RewriteCond %{HTTPS} off
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,NE,R=301,QSA]

RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule ^ https://www.%{HTTP_HOST}%{REQUEST_URI} [L,NE,R=301,QSA]

更紧凑的选择,虽然不是更快或更有效,但是:

RewriteEngine On

RewriteCond %{HTTPS} off [OR]
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteCond %{HTTP_HOST} ^(?:www\.)?(.+)$ [NC]
RewriteRule ^ https://www.%1%{REQUEST_URI} [L,NE,R=301,QSA]

始终中的第三个条件匹配,它仅用于提取主机名的一部分而不一个重要的前导www.