将任何域从非www重定向到www和HTTPS,而无需双重重定向

时间:2018-08-16 12:59:12

标签: .htaccess https url-redirection

我有以下代码:

RewriteEngine on

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

从非www重定向到www

On this question,我找到了以下代码来进行这种重定向,并且还实现了HTTP到https的重定向,而无需进行双重重定向:

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

但是我不需要example.com部分,我需要一个灵活的代码。 所以我尝试了这段代码:

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

语法上的问题是不好的,并且不能按预期工作。

2 个答案:

答案 0 :(得分:2)

您可以使用:

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

答案 1 :(得分:0)

只需在您的.htaccess中使用它:

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

使用%{HTTP_HOST}将抢占主机,而不是隐式调用example.com。在进行测试之前,请确保 清除缓存。

基于评论的编辑

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