我正在尝试将所有流量重定向到 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.com到https://example.com
在职的http://anything.example.com到https://example.com
不工作https://anything.example.com到https://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 年,他们将发布具有通配符子域名功能的新版本,这正是我所需要的。
感谢大家的努力。