如何使用htaccess将www和非www重定向到特定域的https

时间:2016-05-09 07:04:58

标签: .htaccess redirect mod-rewrite https

我需要将www和非www重定向到https。我已经在stackoverflow上到处寻找,但找不到我正在寻找的东西。

规则是:

  • example.com和www.example.com以及https://example.com 必须重定向到https://www.example.com
  • 必须匹配域名和扩展名example.com。 不能也是一张外卡 匹配abc.com或123.com或example.net或其他任何内容
  • 必须仅匹配www子域名。 不能是一张外卡 也匹配sub.example.com或thisisademo.example.com

我目前有:

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

但是,如果有人进入www.example.com,它仍会转到http版本而不是https。

我认为我真正需要的是RewriteCond正则表达式与“example.com”和“www.example.com”完全匹配

由于

3 个答案:

答案 0 :(得分:6)

您可以使用以下规则在一次重定向中将非www或www重定向到https://www

#redirect http non-www to https://www
RewriteCond %{HTTPS} off
RewriteCond %{HTTP_HOST} ^(www\.)?example\.com$
RewriteRule (.*) https://www.example.com/$1 [R=301,L]
#redirect https non-www to www
RewriteCond %{HTTPS} on
RewriteCond %{HTTP_HOST} ^example\.com$
RewriteRule (.*) https://www.example.com/$1 [R=301,L]

在测试此规则之前清除浏览器的缓存。

答案 1 :(得分:2)

这是它对我有用的唯一方式 - !on代替off%{ENV:HTTPS}代替%{HTTPS}

  #non-www. http to www. https
  RewriteCond %{ENV:HTTPS} !on
  RewriteCond %{HTTP_HOST} ^(www\.)?yourdomain\.com$
  RewriteRule (.*) https://www.yourdomain.com/$1 [R=301,L]

  #non-www. https to www. https
  RewriteCond %{ENV:HTTPS} on
  RewriteCond %{HTTP_HOST} ^yourdomain\.com$
  RewriteRule (.*) https://www.yourdomain.com/$1 [R=301,L]

答案 2 :(得分:0)

#First rewrite any request to the wrong domain to use the correct one (i.e. www.)
RewriteCond %{HTTP_HOST} !^www\.
RewriteRule ^(.*)$ https://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

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