[英]www to non www on https not working
我知道这是一个常见的问题,但是我已经尽了自己的本分,并尝试了其他人在其他问题上提出的所有建议,但没有任何效果,因此请耐心等待...
我有一个昨天购买了SSL证书的网站,我设法将网站完全移至https,但是仍然遇到此问题:
当用户尝试使用WWW通过https到达站点时,出现证书错误。
Every other combination works fine (http://www to https:// non www works).
所以基本上我的最终目标是让用户从每种组合中使用URL的https://nonwwwversion
示例:用户尝试通过类似的链接访问网站
https://www.example.com/xyz
他们应该重定向到
https://example.com/xyz
但这是行不通的。
该站点是wordpress站点,我已经从各个角度进行了攻击,但是无法正常工作,不幸的是,托管人员也没有。
SSL是RapidSSL标准,具有非www。 网站的通用名称版本,也许就是问题所在?
我的.htaccess文件如下所示:
RewriteEngine On
RewriteCond %{HTTPS} off [OR]
RewriteCond ^www\. [NC]
RewriteRule ^ https://mysite.com%{REQUEST_URI} [R=301,NE,L]
# BEGIN W3TC Browser Cache
# END W3TC Browser Cache
# BEGIN W3TC Page Cache core
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteEngine On
RewriteCond %{HTTPS} !on
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}
RewriteCond %{HTTPS} =on
RewriteRule .* - [E=W3TC_SSL:_ssl]
RewriteCond %{SERVER_PORT} =443
RewriteRule .* - [E=W3TC_SSL:_ssl]
RewriteCond %{HTTP_COOKIE} w3tc_preview [NC]
RewriteRule .* - [E=W3TC_PREVIEW:_preview]
RewriteCond %{REQUEST_METHOD} !=POST
RewriteCond %{QUERY_STRING} =""
RewriteCond %{REQUEST_URI} \/$
RewriteCond %{HTTP_COOKIE} !(comment_author|wp\-postpass|w3tc_logged_out|wordpress_logged_in|wptouch_switch_toggle) [NC]
RewriteCond "%{DOCUMENT_ROOT}/wp-content/cache/page_enhanced/%{HTTP_HOST}/%{REQUEST_URI}/_index%{ENV:W3TC_SSL}%{ENV:W3TC_PREVIEW}.html" -f
RewriteRule .* "/wp-content/cache/page_enhanced/%{HTTP_HOST}/%{REQUEST_URI}/_index%{ENV:W3TC_SSL}%{ENV:W3TC_PREVIEW}.html" [L]
</IfModule>
# END W3TC Page Cache core
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress
听起来像是问题在于您没有适用于www
的有效SSL证书。 如果您不以这种方式订购,则只会得到domain.com
。 您应该始终订购www版本,然后您会自动获得非域版本,但是根据您从其获得证书的CA,情况并非总是如此。
问题在于,必须进行握手并连接到站点, 然后才能执行任何重写规则。 因此,如果您没有针对WWW
的有效证书,则很可能会收到一个警告页面,指出该页面不安全并且不信任该网站。
解决的唯一方法是获取同时包含WWW and Non WWW
另一个证书。 请记住, WWW
实际上只是另一个子域。
请记住,使用www.domain.com
版本创建CSR,它们会为您提供非www版本(大多数CA都会这样做)。 因此,您不必支付额外的费用。
RapidSSL涵盖www和非www,但必须通过www(www.domain.com)订购证书,这意味着在服务器上创建CSR时,必须使用www来写您的通用名称。 如果订购不带www(domain.com)的证书,则证书将不会自动覆盖www选项。
www.domain.com是domain.com的子域,很多人都忘记了这一点。 这意味着,如果订购时不带www,则意味着您可能不希望将子域包含在SSL中,这就是为什么默认情况下它们未在软件包中提供子域的原因。
我在RapidSSL购买我的第一个证书时犯了同样的错误,我取消了订单(我们退款,原因是在30天内被取消了),然后用www作为通用名称重新订购了新证书,它可以正常工作。
重定向时,如果您具有服务器访问权限,那么在Apache中,这是重定向到https的最佳选择
<VirtualHost *:80>
ServerName domain.com
ServerAlias www.domain.com
Redirect / https://domain.com
</VirtualHost>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.