301使用www将http重定向到https

时间:2017-02-01 08:14:16

标签: .htaccess redirect https http-status-code-301

我必须将我的域名从 http 重定向到 https 。在我的htaccess中,我已经。

RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_HOST} !^www\.example\.com$ [NC]
RewriteRule ^(.*)$ http://www.example.com/$1 [R=301,L]

此代码段重定向所有内容,而不是" www"到" www"。

当我将其更改为

RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_HOST} !^www\.example\.com$ [NC]
RewriteRule ^(.*)$ https://www.example.com/$1 [R=301,L]

结果是:

http://www.example.com/folder/page.php

becomes

Location => https://www.example.com/folder/page.php

精细!

https://example.com/folder/page.php

becomes

https://www.example.com/folder/page.php

精细!

 http://example.com/folder/page.php

 becomes

 Location => https://example.com/folder/page.php

但必须

 Location => https://www.example.com/folder/page.php

如何解决这个问题?

我知道所有这些重定向:

RewriteCond %{SERVER_PORT} !^443$ 
RewriteRule (.*) https://%{HTTP_HOST}/$1   [R=301,L]

RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R=301,L]

但我只需要一个重定向而不是两个301。

2 个答案:

答案 0 :(得分:0)

您可以使用以下规则

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

在测试之前清除浏览器缓存。

答案 1 :(得分:0)

我在这里找到了解决方案:

https://webmasters.stackexchange.com/questions/84757/htaccess-redirect-non-www-to-www-with-ssl-https

@ w3dk的第二个答案正在发挥作用。

ToolbarItem

您的网站需要通过SSL访问www和非www,才能触发.htaccess重定向。

使用letsencrypt可以获得这2个证书。