【问题标题】:Redirect https://*.example.com to https://example.com将 https://*.example.com 重定向到 https://example.com
【发布时间】:2015-08-21 21:56:08
【问题描述】:

请求:

我的证书不允许使用通配符,仅适用于https://example.com

我想重定向来自:http(s)://*.example.com --> https://example.com 的所有流量。

问题:

http://*.example.com/*https://example.com/* 工作正常

我在从以下位置访问时收到错误 NET::ERR_CERT_COMMON_NAME_INVALID

https://*.example.com/*https://example.com

到目前为止我尝试过的...

这是我的default.conf 虚拟主机配置文件:

<VirtualHost *:80>
        NameVirtualHost *:80
        ServerName example.com
        ServerAlias *.example.com
        Redirect permanent / https://example.com/
</VirtualHost>

<IfModule mod_ssl.c>
<VirtualHost *:443>
        NameVirtualHost *:443
        ServerName example.com
        ServerAlias *.example.com
        Redirect permanent "(?i)https:\/\/\d*[a-z0-9]*.example.com" "https://example.com"

我已经尝试了上面最后一个重定向行的几种变体,正如几个相关问题中所建议的那样。由于我是新来的,所以我现在只能发布两个:

我猜这不起作用,因为服务器在处理重定向代码之前返回证书错误。我在上面链接的一个问题暗示了这一点,但它没有被接受为答案,也没有人真正确认或否认它。

我的问题(终于!):

是否可以在没有通配符证书的情况下执行此操作?如果是这样,我上面的重定向代码有什么问题?据我所知,正则表达式适用于从https://*.example.comhttps://example.com 的不区分大小写的重定向。

【问题讨论】:

    标签: regex apache .htaccess redirect ssl


    【解决方案1】:

    是否可以在没有通配符证书的情况下执行此操作?

    没有。原因是因为您有一个证书,表明唯一有效的主机名是 example.com,并且发生的第一件事是建立到网络服务器的连接并建立 SSL 握手。此握手发生在任何 HTTP 通信发生之前。这意味着,在握手期间,浏览器会获得证书,上面写着“您应该只与 example.com 交谈”,并且浏览器会看到它只是尝试连接到“www .example.com”,浏览器会停在那里并返回您看到的异常。这个异常不是来自服务器,而是浏览器说有问题。

    由于所有这些都发生在任何 HTTP 通信之前(因为它必须被加密,并且在握手建立之前你不能加密),所以 你无能为力至于 mod_rewrite 或从 apache 重定向,因为 Apache 甚至还没有收到请求。

    【讨论】:

    • 谢谢,一旦我超过 15 分,我会增加投票计数 :) 希望有某种方法可以将这些信息与 TLS 或 DNS 一起传递。
    【解决方案2】:
    RewriteEngine on
    RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
    RewriteRule ^(.*)$ http://%1%{REQUEST_URI} [R=301,QSA,NC,L]
    

    在您的 .htaccess 文件中添加上述代码 您的网址将被重定向,如: https://www.example.com/test 到 -> https://example.com/test

    【讨论】:

    • 我用你的重写代码替换了Redirect permanent "(?i)https:\/\/\d*[a-z0-9]*.domain.com" "https://domain.com",但在尝试时我仍然遇到同样的错误,例如https://foo.domain.com。它不会重定向到 https://domain.com 并给出此错误:NET::ERR_CERT_COMMON_NAME_INVALID
    • stackoverflow.com/questions/28589282/… 正是您的解决方案
    • 谢谢。该人的问题可以通过颁发允许 www 和非 www 的新证书来解决。许多提供商现在将可选的 www SAN 添加到他们的证书中。我的证书也有一个选项,但我希望 *.domain.com 不仅仅是 www.domain.com 重定向。似乎我唯一的解决方案是上面解释的@jon-lim 通配符证书。
    猜你喜欢
    • 1970-01-01
    • 2020-09-24
    • 2015-09-25
    • 1970-01-01
    • 2015-05-21
    • 2011-07-06
    • 2011-08-12
    • 2017-09-02
    • 1970-01-01
    相关资源
    最近更新 更多