在 httpd/apache2 中将特定主机名从 https 重定向到 httpd

在 httpd/apache2 中将特定主机名从 https 重定向到 httpd

我有一个 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 证书的时代,只有一个答案:

  1. 获取重定向证书。(入门使用 Let's Encrypt)。

  2. 创建一个简单的重定向,优选地使用mod_aliasRedirect

    <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 网站管理员工具网站并重新提交您的站点地图。这应该会导致您的网站很快被抓取。我不知道搜索页面上的链接更新速度有多快。如果您尚未注册您的网站,您需要在网站上添加指定的内容以证明您对该网站有控制权。有关于设置首选站点名称的信息也一样。

相关内容