如何通过Vhost配置实现https://example.com到https://www.example.com的HTTPS重定向(无需.htaccess)
调整Apache虚拟主机配置实现HTTPS非www到www的重定向
没问题,咱们只需要对现有配置做两处调整,就能实现把https://example.com的请求永久跳转到https://www.example.com,同时保持原有的HTTP到HTTPS www的重定向逻辑:
1. 完善80端口虚拟主机(处理所有HTTP请求)
修改你现有的80端口虚拟主机配置,添加ServerAlias来覆盖不带www的HTTP请求,确保所有HTTP访问(不管带不带www)都跳转到HTTPS的www版本:
<Virtualhost *:80> ServerName www.example.com ServerAlias example.com # 新增这一行,覆盖不带www的HTTP请求 DocumentRoot /var/www/html RewriteEngine on RewriteRule ^/?(.*) https://www.example.com/$1 [R=301,L] </VirtualHost>
2. 新增443端口虚拟主机(处理非www的HTTPS请求)
因为HTTPS请求需要对应域名的SSL证书,所以我们要新增一个专门处理example.com的HTTPS虚拟主机,配置好SSL证书后做重定向:
<VirtualHost *:443> ServerName example.com DocumentRoot /var/www/html # 复制你现有www.example.com:443配置中的SSL相关内容 # 以下是示例,替换成你实际的证书路径 SSLCertificateFile /path/to/your/certificate.crt SSLCertificateKeyFile /path/to/your/private.key SSLCertificateChainFile /path/to/your/chain.crt # 若有证书链则添加 RewriteEngine on RewriteRule ^/?(.*) https://www.example.com/$1 [R=301,L] </VirtualHost>
关键说明:
- SSL证书要求:你的SSL证书必须包含
example.com和www.example.com两个域名(即SAN证书),否则浏览器会提示证书错误。如果现有证书不包含,需要重新申请覆盖这两个域名的证书。 - 重定向类型:
R=301是永久重定向,对SEO友好;如果只是测试阶段,可以先用R=302临时重定向,确认没问题后再改回301。 - 生效步骤:配置修改完成后,记得重启Apache服务使配置生效,比如执行:
# Debian/Ubuntu系统 sudo systemctl restart apache2 # CentOS/RHEL系统 sudo systemctl restart httpd
内容的提问来源于stack exchange,提问作者Mike Scott
相关产品推荐
相关产品推荐

