基本上我想要的是重定向请求使用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 ?
答案 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]