.htaccess 使用www强制所有域使用https

.htaccess 使用www强制所有域使用https,.htaccess,ssl,https,.htaccess,Ssl,Https,我在这个论坛上尝试了12种不同的解决方案,其中没有一种会奏效。 我希望我所有的域名都有 现在我用这个: RewriteEngine on RewriteCond %{HTTPS} off RewriteRule (.*) https://www.%{HTTP_HOST}%{REQUEST_URI} 但现在当我进入www.example.com时,它会重定向到 (两次www 它可以完美地重定向到您可以使用以下规则重定向到 这是正常的行为。 实际上,在执行重定向之前,您需要检查www是否在主机中

我在这个论坛上尝试了12种不同的解决方案,其中没有一种会奏效。 我希望我所有的域名都有

现在我用这个:

 RewriteEngine on
RewriteCond %{HTTPS} off
RewriteRule (.*) https://www.%{HTTP_HOST}%{REQUEST_URI}
但现在当我进入www.example.com时,它会重定向到 (两次www


它可以完美地重定向到

您可以使用以下规则重定向到


这是正常的行为。
实际上,在执行重定向之前,您需要检查
www
是否在主机中

一个简单的方法是将问题分为两种情况

RewriteEngine on

# redirect http://www.example.com to https://www.example.com
RewriteCond %{HTTPS} off
RewriteCond %{HTTP_HOST} ^www\. [NC]
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

# redirect http(s)://example.com to https://www.example.com
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule ^ https://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

@vazzilly有一个轻微的输入错误,(在{REQUEST_URI}之前缺少%),我已经修复了它。@JustinIurman HTTPS example.com到HTTPS www.example.com的重定向缺少否?@Tom你是对的。我已经更新了代码来处理这个问题。您只需要删除第二次的https检查rule@ficuscr:我也是,你有什么解决办法吗?@ShashankSaxena我想说从2.4开始这已经过时了。最好看指令和命令。HTTP严格的传输安全性也值得一看。这在2.4中没有过时(这里有证据:)。也许您的框架(如果有的话)被配置为强制http或不带www的域,这将解释循环。看看网络流量,看看那里发生了什么。然而,我已经看到,在一些服务器上,使用
HTTPS
不起作用(不知道确切原因),而使用另一种方法就可以做到这一点
RewriteEngine on

# redirect http://www.example.com to https://www.example.com
RewriteCond %{HTTPS} off
RewriteCond %{HTTP_HOST} ^www\. [NC]
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

# redirect http(s)://example.com to https://www.example.com
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule ^ https://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L]