我环顾四周,似乎无法找到明确的解决方案。对于在我们的域中输入的少数或访问者,我们遇到了一个小问题:
https://www.example.com
- 这是一个安全警告“此网站的安全证书存在问题。”
我们为example.com
因此,如果有人输入http://www.example.com
或www.example.com
,则会将其重定向到https://example.com
,这样可以正常工作。
这是我目前在.htaccess
文件中的内容:
Options +FollowSymLinks
RewriteEngine on
RewriteCond %{SERVER_PORT} 80
RewriteCond %{SERVER_PORT} !^443$ [OR]
RewriteCond %{HTTPS} on
RewriteCond %{HTTP_HOST} ^www\.(.*) [NC]
RewriteRule ^(.*)$ https://%1/$1 [R=301,NC,L]
答案 0 :(得分:2)
修改强>
大多数SSL证书是针对特定主机名发出的,例如www.example.com
或仅example.com
(并且*.example.com
也可能存在通配符证书),所以可能就是这种情况。
也许在最后RewriteCond
中将 www。子域名设为可选匹配可能有助于将用户带到证书中声明的域名:击>
RewriteCond %{HTTP_HOST} ^(?:www\.)?(.*) [NC]
击> <击> 撞击>
答案 1 :(得分:2)
我认为问题不在于重写/重定向规则,而在于http服务器处理ssl连接的方式。甚至在服务器有机会查看重写/重定向规则之前,SSL握手就会发生,如果我们有example.com的证书,我们输入URL www.example.com连接将因证书无效而中止。检查自己,设置重定向条件,将URL www.example.com指向SSL安全域上的example.com。首先,您将获得无效的证书错误,但是当您向浏览器添加例外时,您会注意到它有效。
答案 2 :(得分:0)
试试这个
RewriteCond %{HTTP_HOST} ^[a-z0-9-]+\.[a-z]+$
RewriteRule !"" https://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L,NC]
而不是
RewriteCond %{HTTP_HOST} ^www\.(.*) [NC]
RewriteRule ^(.*)$ https://%1/$1 [R=301,NC,L]
答案 3 :(得分:0)
你要做的事是不可能的。如果用户通过SSL访问www.domain.cc,那么如果您没有有效的SSL证书,则会收到证书错误 - 即使您只想将其重定向到正确的站点。
您将需要www.domain.cc的新证书,或说服您的注册商为您提供* .domain.cc的通配符证书,或者具有多个subjectAltName属性的通配证书。见http://www.crsr.net/Notes/Apache-HTTPS-virtual-host.html
答案 4 :(得分:0)
首先,您需要一个涵盖www.xxxx.yyy
和xxxx.yyy
的SSL证书。
如果您获得www.xxxx.yyy
的证书,则您的提供商可以同时涵盖这两个证书,但如果您获得xxxx.yyy
,则仅涵盖.htaccess
。仔细阅读他们的条件。
我读过如此多的建议,指出如何通过各种临时意见重定向,结果各不相同,而且大多没有任何正式解释。
当然,这意味着要进入Apache https://xxxx.yyy
引用,并按照第一原则进行工作。
重申一下,主要要求是将所有http(s)请求重定向到RewriteEngine On
。
与往常一样,打开重写引擎:
RewriteCond %{SERVER_PORT} 80
RewriteRule ^(.*)$ https://xxx.yyy/$1 [L,R]
对于http,即:
https
然而,对https(port = 443)执行相同操作会强制循环,这会导致错误。我们必须将流程限制为仅适用于www
和RewriteCond
。我们通过在一行中提供两个RewriteCond %{SERVER_PORT} 443
RewriteCond %{HTTP_HOST} ^www[.].+$
RewriteRule ^(.*)$ https://xxxx.yyy/$1 [L,R]
语句来实现这一点,这些语句被视为隐式AND:
RewriteRule
在[L,R]
的末尾,L
告诉重写引擎:
RewriteCond
=停止遵守该规则。也就是说,如果由于满足条件(R
)而执行规则,则在完成时停止,否则转到下一个条件/规则集。https://xxxx.yyy
=向浏览器发出HTTP重定向(默认代码= 302),因此可以采取用户或自动操作来更新书签,以便日后始终使用{{1}}。 LI>
醇>