我有以下htaccess代码:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond !{HTTPS} off
RewriteRule ^(.*)$ https://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
RewriteCond %{HTTP_HOST} !^www\.
RewriteRule ^(.*)$ https://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
</IfModule>
我希望我的网站被重定向到https://www。使用HTTPS,并强制执行www。子域名,
但当我访问http://www时。(没有HTTPS),它不会重定向到https://www与HTTPS。
糟糕的解决方案,为什么!
永远不要使用下面的解决方案,因为当你使用他们的代码时,它是这样的:
RewriteCond %{HTTPS} off
RewriteRule .* https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule .* https://www.example.com%{REQUEST_URI} [L,R=301]
浏览器进入:
http://example.com
然后重定向到:
https://example.com
然后重定向到:
https://www.example.com
这对服务器来说请求太多了。
大多数答案甚至是公认的都有这个问题。
最好的解决方案和答案
这段代码有一个[OR]条件,以防止url的双重更改!
RewriteEngine on
RewriteCond %{HTTPS} off [OR]
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule (.*) https://www.example.com%{REQUEST_URI} [R=301,L]
糟糕的解决方案,为什么!
永远不要使用下面的解决方案,因为当你使用他们的代码时,它是这样的:
RewriteCond %{HTTPS} off
RewriteRule .* https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule .* https://www.example.com%{REQUEST_URI} [L,R=301]
浏览器进入:
http://example.com
然后重定向到:
https://example.com
然后重定向到:
https://www.example.com
这对服务器来说请求太多了。
大多数答案甚至是公认的都有这个问题。
最好的解决方案和答案
这段代码有一个[OR]条件,以防止url的双重更改!
RewriteEngine on
RewriteCond %{HTTPS} off [OR]
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule (.*) https://www.example.com%{REQUEST_URI} [R=301,L]