域名迁移后.htaccess配置的301重定向不生效如何排查修复
故障根因
首先排除服务商给出的错误结论:站点目录下仅保留.htaccess文件不会导致重定向失败,.htaccess是Apache的分布式配置文件,只要服务开启了对应目录的配置读取权限,无其他业务文件时规则依然可以正常执行。
两个访问报错对应的实际故障点如下:
- HTTP协议访问返回404:旧域名80端口对应的Apache虚拟主机配置中,未开启
AllowOverride All选项,服务根本没有读取、解析你放在站点根目录的.htaccess文件,配置的301规则完全未生效。请求到达服务后找不到对应路径的实体文件,直接返回404响应。你当前写的重定向规则redirect 301 /examplepage.html https://www.newdomain.com/examplepage.html语法本身符合mod_alias模块的规范,不存在写法错误。 - HTTPS协议访问返回ERR_CONNECTION_CLOSED:服务商提到的SSL证书问题确实存在,但逻辑表述错误——不是「未安装SSL证书导致无法重定向」,而是旧域名的443端口根本没有完成正确的虚拟主机配置:要么未部署合法SSL证书导致TLS握手阶段直接中断,要么443端口的服务配置根本没有指向你存放.htaccess的站点目录,甚至Web服务未正常对旧域名的443端口请求做响应,导致连接直接被关闭,请求根本没有到达重定向规则的执行阶段。
修复方案
按以下顺序操作即可解决问题:
- 修复HTTP协议下的重定向失效
- 登录旧域名所在服务器,找到Apache服务中旧域名80端口对应的虚拟主机配置段,将站点根目录对应的
AllowOverride None配置修改为AllowOverride All,赋予服务读取.htaccess文件的权限。 - 若追求更高的执行效率,可直接删除根目录下的.htaccess文件,将整站301跳转规则直接写在虚拟主机配置中,参考配置如下:
该规则可以覆盖所有旧域名路径的跳转,无需逐页配置。配置完成后重启Apache服务,测试HTTP协议下的旧域名链接,确认301跳转正常生效。<VirtualHost *:80> ServerName 这里替换为你的旧域名 RedirectMatch 301 ^/(.*)$ https://www.newdomain.com/$1 </VirtualHost> - 登录旧域名所在服务器,找到Apache服务中旧域名80端口对应的虚拟主机配置段,将站点根目录对应的
- 修复HTTPS协议下的连接故障
- 为旧域名申请合法SSL证书,新增旧域名443端口的虚拟主机配置,完成证书绑定,配置与80端口一致的整站301跳转规则(无需单独存放站点文件)。
- 检查服务器防火墙、安全组规则,确认443端口对外开放,重启Apache服务后测试HTTPS协议下的旧域名访问,确认可以正常跳转到新域名对应页面,无连接关闭报错。
补充验证:配置完成后可使用curl命令分别测试HTTP、HTTPS的响应头,确认返回状态码为301,Location字段为新域名对应地址即可。
内容的提问来源于stack exchange,提问作者jxm
相关产品推荐
相关产品推荐

