重定向从非www到www并强制SSL

问题描述:

我想强制所有http通信到https,并且也始终强制www。重定向从非www到www并强制SSL

这是我到目前为止有:

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

这似乎正常工作时的URL不包含WWW。因此http://mydomain.com正确重定向到https://www.mydomain.com

但是,当www部件存在时,它不能正确重定向到https。所以,www.mydomain.com不重定向到https://www.mydomain.com

编辑 我有这方面的工作有两个重写块:

# Force ssl 
RewriteCond %{HTTPS} !=on 
RewriteRule^https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301] 

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

不知道,如果这是可以接受与否,但它的工作原理

在重写过程中使用您的domain name而不是HTTP_HOST,因此,如果www存在或不存在,您可以使用1规则。你可以有两个重写规则,但只使用OR。我认为你正在寻找的是这个。

# always redirect to www and/or https 
RewriteCond %{HTTP_HOST} ^mydomain\.com [NC,OR] 
RewriteCond %{HTTPS} !^on$ 
RewriteRule ^(.*) https://www.mydomain.com/$1 [R=301,L]