Apache配置:实现子域名重定向至HTTPS版本的问题
Apache配置:实现子域名重定向至HTTPS版本的问题
看起来你现在卡在了www.example.com没法自动跳转到HTTPS版本的问题上,不过主域名example.com已经正常工作了,咱们一步步来排查和解决。
首先先确认下你当前的状态:
- 可以正常访问的地址:
- https://example.com
- https://www.example.com
- http://example.com
- http://www.example.com
问题出在当你输入www.example.com的时候,浏览器没有自动重定向到https://www.example.com,咱们看看你的配置哪里需要调整:
问题分析
你在example.conf的80端口(HTTP)配置里,只给www.example.com加了重定向规则,但这个规则的覆盖范围有限,没能确保所有HTTP请求都转到HTTPS;另外还要确认HTTPS端口的配置是否正确包含了www子域名。
解决方案
1. 调整HTTP端口(80)的重定向规则
打开你的example.conf,找到<VirtualHost *:80>块里的Rewrite规则,把原来的:
RewriteEngine on RewriteCond %{SERVER_NAME} =www.example.com RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
替换成通用的HTTP转HTTPS规则,这样不管是主域名还是www子域名,只要是HTTP访问都会自动跳转到对应的HTTPS版本:
RewriteEngine on # 匹配所有非HTTPS的请求,重定向到对应域名的HTTPS地址 RewriteCond %{HTTPS} off RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [END,NE,R=permanent]
2. 检查HTTPS端口(443)的配置
打开example-le-ssl.conf,确保<VirtualHost *:443>块里包含了www子域名的配置,类似这样:
<VirtualHost *:443> ServerName example.com ServerAlias www.example.com # 必须包含这一行,确保www子域名能使用SSL证书 ProxyPreserveHost On ProxyPass / http://127.0.0.1:8080/ ProxyPassReverse / http://127.0.0.1:8080/ DocumentRoot /dirs ErrorLog /dirs/dir-error.log CustomLog /home/dirs/dir-access.log combined # Certbot自动生成的SSL配置,确保路径正确 SSLCertificateFile /etc/letsencrypt/live/example.com/fullchain.pem SSLCertificateKeyFile /etc/letsencrypt/live/example.com/privkey.pem Include /etc/letsencrypt/options-ssl-apache.conf </VirtualHost>
这里重点是ServerAlias www.example.com必须存在,否则HTTPS版本的www子域名可能无法正常使用证书。
3. 重启Apache服务并测试
修改完配置后,重启Apache让配置生效:
sudo systemctl restart apache2 # 如果是旧版系统,可能用这个命令: # sudo service apache2 restart
然后清除浏览器的缓存(避免旧的重定向规则干扰),再输入www.example.com测试,应该就会自动跳转到https://www.example.com了。
备注:内容来源于stack exchange,提问作者tygzy
相关产品推荐
相关产品推荐

