htaccess - 使用www将非www重定向到https

时间:2014-12-30 19:18:15

标签: .htaccess

我最近从windows服务器切换到godaddy,linux,cpanel服务器。我没有使用htaccess的goos,我认为这应该是一件相当简单的事情,但我无法做到。

我的SSL证书设置为在以下网站上运行:https:www.mydomain.com但不适用于(非www网站)。

我希望所有流量都转到https:example.com/any-folder/any-file重定向到https:www.example.com/any-folder/any-file

所有流量到http:example.com/any-folder/any-file重定向到http:www.example.com/any-folder/any-file

感谢您提供的任何帮助。 这是我的htaccess文件:(所有请求都被重定向到https ....我很困惑)

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

1 个答案:

答案 0 :(得分:0)

出现这种行为的原因是

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

会将所有缺少www.的请求重写为http://www.example.com/$1。也适用于HTTPs请求。此重写将导致新请求,因为它是重定向,您使用[R]定义的内容。

之后,下一个规则

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

会将非HTTP的所有请求重定向到https://www.example.com/$1。即使原始请求不应该是HTTP。

你必须这样做:

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