【问题标题】:www to non www on https not workinghttps 上的 www 到非 www 不工作
【发布时间】:2015-03-07 07:19:15
【问题描述】:

我知道这是一个常见的问题,但我已经尽了自己的一份力量,并尝试了人们对其他问题提出的所有建议,但没有任何结果,所以请多多包涵...

我有一个网站,昨天我购买了 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

【问题讨论】:

标签: wordpress .htaccess ssl


【解决方案1】:

RapidSSL 涵盖 www 和非 www,但您必须订购带有 www (www.domain.com) 的证书,这意味着在服务器上创建 CSR 时,您的 Common Name 必须写为 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>

【讨论】:

    【解决方案2】:

    听起来问题是您没有www 的有效 SSL 证书。如果你不是这样订购的,你只会得到domain.com。您应该始终订购 www 版本,然后您会自动获得非域版本,但情况并非总是如此,具体取决于您从中获得它的 CA。

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-02-13
      • 1970-01-01
      • 1970-01-01
      • 2014-12-16
      • 2017-09-13
      • 2019-04-19
      • 1970-01-01
      • 2020-02-02
      相关资源
      最近更新 更多