You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

cPanel中htaccess 301重定向仅首页生效 其余路径不跳转问题

问题说明

cPanel环境下配置.htaccess做整站301跳转至新域名时,仅根域名访问可正常跳转,其余子路径访问完全不触发重定向。

复现场景

  • 访问 olddomain.com 跳转至 newdomain.com:功能正常
  • 访问 olddomain.com/任意路径/文件 跳转至新域名对应路径:功能失效

当前生效配置

RewriteEngine On
RewriteCond %{HTTP_HOST} ^olddomain.com$ [NC,OR]
RewriteCond %{HTTP_HOST} ^www.olddomain.com$
RewriteRule (.*)$ http://www.newdomain.com/$1 [R=301,L]
故障原因

三个cPanel环境下的高频触发点:

  • 跳转规则放置位置错误。cPanel会自动为CMS(如WordPress)、域名配置生成本地伪静态规则,子路径请求进入后先被这类规则匹配,直接走本地文件处理逻辑,根本不会执行你写的域名跳转规则
  • 规则捕获写法兼容性差。部分cPanel的Apache配置下,(.*)在非根路径场景下无法捕获完整请求路径,导致替换后的目标地址为空,规则不触发
  • 301强缓存干扰。之前错误配置的301响应被浏览器本地缓存,子路径测试时一直返回旧的错误结果,没有加载你最新上传的规则
修复方案
  1. 调整规则顺序:把域名跳转规则挪到.htaccess文件最顶部,放在所有其他规则(包括cPanel自动生成的规则、CMS自带伪静态、防盗链规则等)之前,保证域名判断逻辑最先执行。
  2. 替换为cPanel环境兼容的跳转规则,直接通过服务器变量获取请求路径,避开正则捕获的兼容性问题:
RewriteEngine On
RewriteCond %{HTTP_HOST} ^(www\.)?olddomain\.com$ [NC]
RewriteRule ^ https://www.newdomain.com%{REQUEST_URI} [R=301,L,NE]

规则说明:

  • 条件项同时匹配带www和不带www的旧域名,无需拆分两行编写
  • 直接调用%{REQUEST_URI}获取完整请求路径,不会出现捕获为空的问题
  • NE参数避免路径内的中文、特殊符号被错误转义
  • 如果新域名未配置HTTPS,将规则内的https替换为http即可
  1. 清理缓存验证:
    • 测试阶段优先使用浏览器无痕模式访问,避开本地301强缓存干扰
    • 若开启了cPanel自带缓存、服务器端CDN缓存,全部清理完成后再测试
  2. 兜底检查:排查旧站点子目录内是否存在单独的.htaccess文件,子目录下的.htaccess优先级高于根目录规则,会导致子路径不执行根目录的跳转逻辑。

内容的提问来源于stack exchange,提问作者NOmdib

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 22:27:34