apache将http重定向到https,将www重定向到非www

时间:2012-03-30 15:09:35

标签: apache .htaccess redirect ssl

基本上我想要的是重定向请求使用HTTPS而不是http

到目前为止,我已经在我的htaccess中使用了这个功能并且效果很好: 代码:

<IfModule mod_rewrite.c> 
RewriteEngine On 
RewriteCond %{HTTPS} off 
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} 
</ifModule> 

今天有人注意到了: http://www.example.com它重定向到并显示不安全的连接。

我的ssl是针对非www域设置的:mydomain.com

所以我需要确保所有网站请求都发送到非www和https: 如果我把example.com重定向到https://example.com

,它工作正常

但是使用www.example.com,它会转到htts://www.example.com并显示错误

我需要添加到我的代码中以将www重定向到非www然后再转换为ssl ?

6 个答案:

答案 0 :(得分:22)

您必须为www和没有www重新颁发证书。

如果有人通过您的公用名称中未包含的域名连接到您的网站,他们将收到警告。

ssl协商过程发生之前来自服务器的任何响应(在您的情况下,重定向),因此在所有情况下,您的访问者在使用不在您的域中时会收到警告俗名。

答案 1 :(得分:17)

您可以从HTTP_HOST

获得所需内容
RewriteEngine On 
RewriteCond %{HTTPS} off 
RewriteCond %{HTTP_HOST} ^(?:www\.)?(.*)$ [NC]
RewriteRule (.*) https://%1%{REQUEST_URI} [L,R=301]

这样,它将使主机始终没有子域。

答案 2 :(得分:3)

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

答案 3 :(得分:2)

如果您使用的是CloudFlare的免费帐户,那就是问题所在。 CloudFlare的免费帐户不支持SSL证书。要继续使用带有SSL证书的CloudFlare免费帐户,只需转到CloudFlare中的DNS设置,然后从您的域中取出橙色云,并从cname WWW中取出。这将解决您的问题,并导致www和非www重定向到https。

另外请务必将此代码添加到.htaccess文件中:

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

然后,一切都应该有效!

答案 4 :(得分:0)

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

答案 5 :(得分:0)

看看这个:

RewriteEngine On
RewriteCond %{HTTP_HOST}#%{HTTPS}s ^www\.([^#]+)#(?:off|on(s)) [NC]
RewriteRule ^ http%2://%1%{REQUEST_URI} [R=301,L]
RewriteCond %{HTTPS} !=on
RewriteRule ^.*$ https://%{SERVER_NAME}%{REQUEST_URI} [R,L]