2016-05-09 60 views
4

我需要将www和非www重定向到https。我在无处不在的stackoverflow,但无法找到我正在寻找什么。如何使用htaccess将www和非www重定向到特定域的https请使用htaccess

的规则是:

  • 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”

感谢

回答

4

可以使用以下规则测试THI之前redierct非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] 

清除浏览器的缓存的规则。

+0

不幸的是,这仍然会重定向不是“example.com”的域名,也会重定向不是“www”的子域名。 它应该只能重定向example.com或www.example.com。 – nhiik

+0

@Nhiik:我已经更新了规则,将** example.com **替换为RewriteCond中的** yourdomain.com **,并将** www.example.com **替换为** www.yourdomain.com **该规则的目标 – starkeen

+0

感谢但仍不够具体。它重定向到https,但它的范围仍然太宽。如果我输入test.example.com,它仍会被重定向到https://www.example.com。这不应该发生。另外,如果我将CNAME example.net或testurl.com添加到服务器,它仍会被重定向到https://www.example.com。这不应该发生。只有example.com的www子域名和基本域名才能通过。 – nhiik

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] 
+0

不幸的是这仍然重定向不属于域“example.com”,并重定向子站点不是“www。”。 它应该只能重定向example.com或www.example.com。 – nhiik

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] 
相关问题