我有一个 Web 服务器,该服务器的子域已应用 SSL 证书。https://shop.example.com
我还有一个http://example.com
没有 SSL 证书的主机名。调用时https://example.com
,浏览器会发出警告,称无法验证证书,因为 Web 服务器将自己标识为https://shop.example.com
。
我希望所有到达的流量都https://example.com
被重定向至http://example.com
,并且保持https://shop.example.com
原样。
我的 httpd.conf 文件通常是这样的:
< VirtualHost 122.11.11.21:80 >
ServerName shop.example.com
.. regular old port 80 ..
< /VirtualHost >
< VirtualHost 122.11.11.21:443 >
ServerName shop.example.com
.. SSL applies here ..
< /VirtualHost >
< VirtualHost 122.11.11.21:80 >
ServerName example.com
.. regular old port 80 ..
< /VirtualHost >
看起来好像我还没有设置 SSL,https://example.com
但可以调用 SSL 模式,浏览器将连接标识为https://shop.example.com
。我需要重定向,https://example.com
因为出于某种原因,尽管 Google 显示警告,但 Google 已使用此 URL 为我的网站建立了索引。
我尝试了各种方法来使其重定向,但都不起作用。
任何帮助将不胜感激。
答案1
这个问题被放在了头版,我认为 2013 年的回答是基于证书很贵,而 OP 又买不起的假设example.com
。
在这个免费 Let's Encrypt 证书的时代,只有一个答案:
获取重定向证书。(入门使用 Let's Encrypt)。
创建一个简单的重定向,优选地使用mod_alias
Redirect
。<VirtualHost *:443> ServerName example.com SSLEngine on SSLCertificateFile /etc/letsencrypt/live/example.com/fullchain.pem SSLCertificateKeyFile /etc/letsencrypt/live/example.com/privkey.pem Redirect permanent / https://shop.example.com/ </VirtualHost>
答案2
这是我使用的规则的通用版本。
RewriteEngine On
RewriteCond %{HTTP_HOST} !^www\.example\.com [NC]
RewriteRule ^/(.*) https://www.example.com/$1 [L,R=301]
这会将所有与规范名称不匹配的请求永久重定向到规范名称。将其包含在 SSL(HTTPS 站点)的虚拟主机定义中。
以下规则集应强制将任何非 HTTPS 流量转换为 HTTPS。
RewriteEngine On
RewriteCond %{HTTPS} !=on [NC]
RewriteCond %{HTTP_HOST} ^www\.example\.com [NC]
RewriteRule ^/(.*) https://www.example.com/$1 [L,R=301]
编辑:要测试重定向,您需要接受证书错误。然后您应该会进入所需的网站。这是您的客户将看到的内容,直到您让 Google 重新索引您的网站。登录 Google 网站管理员工具网站并重新提交您的站点地图。这应该会导致您的网站很快被抓取。我不知道搜索页面上的链接更新速度有多快。如果您尚未注册您的网站,您需要在网站上添加指定的内容以证明您对该网站有控制权。有关于设置首选站点名称的信息也一样。