HTACCESS配置HTTPS转HTTP失效:非WWW域名重定向报错求助
解决HTTPS到HTTP重定向失败(ERR_CONNECTION_REFUSED)的问题
首先咱们拆解下你遇到的核心问题:ERR_CONNECTION_REFUSED 这个报错不是重写规则的锅,而是你的服务器根本没在HTTPS默认端口(443)监听 example.com(裸域)的请求。当用户访问 https://example.com 时,服务器直接拒绝了连接,重写规则连执行的机会都没有。
接下来分两步彻底解决:
1. 先配置SSL虚拟主机,让服务器接受裸域的HTTPS请求
你需要在Apache配置里添加一个覆盖 example.com 和 www.example.com 的SSL虚拟主机——哪怕这个主机只用来做重定向。如果你的SSL证书只支持其中一个域名,建议换成包含两个域名的SAN证书,避免浏览器先弹出证书错误影响体验。
示例配置代码:
<VirtualHost *:443> ServerName example.com ServerAlias www.example.com # 填写你的SSL证书路径 SSLEngine on SSLCertificateFile /path/to/your/certificate.crt SSLCertificateKeyFile /path/to/your/private.key SSLCertificateChainFile /path/to/your/chain.crt # 可选,根据证书要求添加 # 开启重写引擎 RewriteEngine On </VirtualHost>
2. 修正重写规则,精准实现你的需求
根据你的描述,我分两种常见场景给出适配规则:
场景A:保留原域名的WWW状态,将所有HTTPS重定向到对应HTTP版本
比如:
https://www.example.com/page02.php→http://www.example.com/page02.phphttps://example.com/page02.php→http://example.com/page02.php
在上面的SSL虚拟主机配置里添加这条规则:
RewriteCond %{HTTPS} on RewriteRule ^(.*)$ http://%{HTTP_HOST}/$1 [L,R=301]
场景B:统一将所有HTTPS请求重定向到HTTP的WWW版本
比如:
https://www.example.com/page02.php→http://www.example.com/page02.phphttps://example.com/page02.php→http://www.example.com/page02.php
用这条更简洁的规则:
RewriteCond %{HTTPS} on RewriteCond %{HTTP_HOST} ^(www\.)?example\.com$ [NC] RewriteRule ^(.*)$ http://www.example.com/$1 [L,R=301]
最后几个注意点
- 测试阶段可以先用
R=302临时重定向,避免浏览器缓存错误规则;确认没问题后再换成R=301永久重定向(对SEO更友好)。 - 修改配置后记得重启Apache服务生效:
sudo systemctl restart apache2(根据你的服务器系统调整命令)。 - 检查服务器防火墙是否允许443端口的入站请求,否则也会出现连接拒绝的问题。
内容的提问来源于stack exchange,提问作者Craig
相关产品推荐
相关产品推荐

