Apache 从 SSL 子域重定向不起作用

Apache 从 SSL 子域重定向不起作用

我正在尝试将所有流量重定向到 https 并将所有子域重定向到主域,但无法正确完成。我正在使用带有最新 apache2 的 Ubuntu 14.04。

我为端口 80 设置了虚拟主机,以将所有流量重定向到 https:

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

并设置 SSL 虚拟主机以将所有子域重定向到主域:

    <IfModule mod_ssl.c>
<VirtualHost *:443>
     ServerAdmin [email protected]
     ServerName example.com
     ServerAlias *.example.com
     DocumentRoot /var/www/example.com/public_html/
     ErrorLog /var/www/example.com/logs/error.log
     CustomLog /var/www/example.com/logs/access.log combined
Include /etc/letsencrypt/options-ssl-apache.conf
Include /etc/letsencrypt/options-ssl-apache.conf
Include /etc/letsencrypt/options-ssl-apache.conf
SSLCertificateFile /etc/letsencrypt/live/example.com-0001/cert.pem
SSLCertificateKeyFile /etc/letsencrypt/live/example.com-0001/privkey.pem
Include /etc/letsencrypt/options-ssl-apache.conf
SSLCertificateChainFile /etc/letsencrypt/live/example.com-0001/chain.pem

Redirect permanent / https://example.com

</VirtualHost>

</IfModule>

结果如下:

在职的http://example.comhttps://example.com

在职的http://anything.example.comhttps://example.com

不工作https://anything.example.comhttps://example.com

问题是:如何将 ssl 子域重定向到主域?

请告诉我我做错了什么。

多谢。

答案1

鉴于Let's Encrypt 只会开始2018 年 1 月颁发通配符证书,并且您的服务器设置较早,看起来您没有使用通配符 SSL 证书。

为了连接https,甚至重定向或处理您的“别名”,您必须拥有客户端发送的任何域的有效 SSL 证书。

SSL 握手发生一切之前Apache 服务器中的处理。换句话说,如果您没有使用通配符 SSL 证书,SSL 握手将失败https://anything.example.com Apache 配置文件曾经有机会处理该别名。

无论还有什么问题,在需要进一步诊断之前,必须先纠正这个问题。例如,如果期望的行为是https://anything.example.com“重定向”到http://example.com你,那么可能必须使用mod_rewrite条件匹配作为RedirectMatch指令仅与 URL 路径匹配,并使用ServerAlias将创建必要的匹配来处理初始查询,但不会尝试“重写”或“重定向”查询到另一个所需的 URL。

答案2

当前版本的 Let's Encrypt 无法解决问题。2018 年,他们将发布具有通配符子域名功能的新版本,这正是我所需要的。

感谢大家的努力。

相关内容