CentOS8下Apache配置HTTPS子域名虚拟主机重写规则方法
子域名"Not Secure"问题的配置调整方案
问题根源分析
当前仅配置了主域名example.com的HTTP跳转HTTPS规则,但子域名subdomain.example.com缺少对应的:
- 80端口虚拟主机的HTTP转HTTPS重写配置
- 443端口的HTTPS虚拟主机配置(含SSL证书绑定)
另外,原主域名80端口配置存在语法错误,RewriteEngine On与RewriteRule写在同一行会导致重写规则不生效。
具体修复步骤
1. 修正主域名80端口虚拟主机配置
将原配置中错误的重写规则拆分,确保语法正确:
<VirtualHost *:80> ServerName example.com DocumentRoot /var/www/html/example/public <Directory /var/www/html/example> AllowOverride All </Directory> RewriteEngine On RewriteRule ^(.*)$ https://%{SERVER_NAME}$1 [R=301,L] </VirtualHost>
2. 添加子域名80端口跳转配置
新增一个80端口的虚拟主机,实现子域名的HTTP转HTTPS跳转:
<VirtualHost *:80> ServerName subdomain.example.com RewriteEngine On RewriteRule ^(.*)$ https://%{SERVER_NAME}$1 [R=301,L] </VirtualHost>
3. 配置子域名HTTPS虚拟主机
确保你拥有包含subdomain.example.com的SSL证书(通配符证书*.example.com或SAN证书均可),然后添加443端口的虚拟主机配置:
<VirtualHost *:443> ServerName subdomain.example.com # 根据子域名的实际网站目录修改DocumentRoot和Directory路径 DocumentRoot /var/www/html/subdomain/public <Directory /var/www/html/subdomain> AllowOverride All </Directory> # SSL证书相关配置,替换为你的证书实际路径 SSLEngine On SSLCertificateFile /etc/ssl/certs/your_certificate.crt SSLCertificateKeyFile /etc/ssl/private/your_private.key # 若存在证书链文件,取消下方注释并填写路径 # SSLCertificateChainFile /etc/ssl/certs/your_chain.crt </VirtualHost>
4. 验证配置并重启服务
- 检查Apache配置语法:
apachectl configtest - 若输出
Syntax OK,重启Apache服务:systemctl restart apache2
额外注意事项
- 确认子域名
subdomain.example.com的DNS解析已指向当前服务器IP(可通过nslookup subdomain.example.com验证) - 确保服务器防火墙已开放443端口(HTTPS流量)
- 若使用Let's Encrypt证书,可通过
certbot --apache -d subdomain.example.com自动生成并配置证书
内容的提问来源于stack exchange,提问作者joenpc npcsolution
相关产品推荐
相关产品推荐

