www到非www上https不工作

时间:2015-01-09 01:43:49

标签: wordpress .htaccess ssl

我知道这是一个常见的问题,但我已经完成了我的工作并尝试了其他人提出的所有问题而没有任何问题,所以请耐心等待......

我有一个网站,我昨天购买了SSL证书,我设法将网站完全移至https,但我仍然遇到此问题:

当用户尝试使用WWW访问https上的站点时,我收到证书错误。

Every other combination works fine (http://www to https:// non www works).

所以基本上我的最终目标是让用户从每个组合中获取网址的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

2 个答案:

答案 0 :(得分:0)

听起来问题是您没有www的有效SSL证书。如果您没有按照这种方式订购,那么您只能获得domain.com。您应该总是订购www版本,然后自动获得非域版本,但情况并非总是如此,具体取决于您获得的CA.

问题是它必须进行握手并连接到网站之前将会发生任何重写规则。因此,如果您没有WWW的有效证书,您很可能会收到一个警告页面,说明它不安全且不信任该网站。

解决这个问题的唯一方法是获取另一个包含WWW and Non WWW的证书。请记住,WWW实际上只是另一个子域名。

请记住使用www.domain.com版本创建CSR,它们将为您提供非www版本(大多数CA将会)。因此,您不必支付额外费用。

答案 1 :(得分:0)

RapidSSL涵盖www和非www,但您必须使用www(www.domain.com)订购证书,这意味着在服务器上创建CSR时,您的公用名必须使用www编写。如果您在没有www(domain.com)的情况下订购证书,则证书不会自动涵盖www选项。

www.domain.com是domain.com的子域名,很多人都忘记了这一点。这意味着,如果您在没有www的情况下订购它,则意味着您可能不希望子域名包含在您的SSL中,这就是他们默认不在包中提供子域名的原因。

我在RapidSSL购买我的第一张证书时犯了同样的错误,我取消了订单(我们得到退款,因为它在30天内被取消)然后用www作为Common Name重新订购了新订单并且它有效。< / p>

说到重定向,如果你有服务器访问权限,在Apache中这是重定向到https的最佳选择

<VirtualHost *:80>
    ServerName domain.com
    ServerAlias www.domain.com
    Redirect / https://domain.com
</VirtualHost>