apache旧域名301重定向核心是路径级精准映射,须用mod_rewrite在服务端配置层实现一一对应跳转,禁止跳首页或链式跳转;推荐通过include指令将规则分离至独立文件(如redirect-old.conf)并引入virtualhost块,确保rewriteengine开启、路径绝对、语法正确且批量验证状态码与canonical。

旧域名永久迁移时,Apache 的 301 重定向核心是精准、直接、服务端控制——不能跳首页,不能链式跳转,也不能靠 PHP 或 JS 补救。关键在于用 mod_rewrite 在服务器配置层统一处理,确保每个旧 URL 都对应跳到语义等价的新 URL。
明确目标:不是“全站跳首页”,而是“路径级一一映射”
- ✅ 正确做法:
https://old.com/blog/article.html→https://new.com/posts/article.html - ❌ 错误做法:所有旧地址都
301到https://new.com/(丢失 SEO 权重、破坏用户体验)
所以配置前先整理好 旧 URL → 新 URL 的映射表,尤其注意:
- 目录结构调整(如
/news/→/blog/) - 文件后缀变更(
.php→.html) - 参数清理(带 utm 或 session 的旧链接需剥离后再跳转)
推荐方式:用 Include 分离规则,便于维护和复用
把所有重定向逻辑抽成独立文件(比如 /www/server/apache/conf/extra/redirect-old.conf),再通过 Include 引入虚拟主机配置中。这样好处明显:
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
- 主配置干净,升级或调试不干扰核心设置
- 多个旧域名可共用同一套管理方式
- 宝塔面板里改配置时不易手误覆盖
文件内容示例(支持 www 和无 www 旧域名):
RewriteEngine On
RewriteCond %{HTTP_HOST} ^(www\.)?old-site\.com$ [NC]
RewriteRule ^(.*)$ https://new-site.com$1 [R=301,L]
说明:
-
RewriteCond匹配old-site.com和www.old-site.com -
$1保留原始路径,保证/about/→/about/,不是/ -
[R=301,L]表示永久跳转且立即终止后续规则
必须检查的三项基础配置
确认 mod_rewrite 已启用
宝塔中:【软件管理】→ Apache → 【设置】→ 【配置修改】→ 勾选rewrite_module
命令行验证:apachectl -t返回Syntax OK才算通过Include 路径写绝对路径,且 Apache 有读取权限
比如写成Include /www/server/apache/conf/extra/redirect-old.conf,不能用相对路径或~/放在
<virtualhost></virtualhost>块内合适位置
推荐加在DocumentRoot下方、<directory></directory>块之前,避免被其他规则拦截或覆盖
进阶场景处理建议
多个旧域名同时迁移
在同一.conf文件里追加多组RewriteCond + RewriteRule,顺序不影响,但每组都要带[L]-
强制 HTTPS + 域名跳转一步到位
如果旧站还存在 HTTP 访问,可合并处理:RewriteCond %{HTTPS} off [OR] RewriteCond %{HTTP_HOST} ^(www\.)?old-site\.com$ [NC] RewriteRule ^(.*)$ https://new-site.com$1 [R=301,L] -
个别页面无对应新页,不跳首页
单独加一条规则返回410 Gone更清晰:RewriteCond %{HTTP_HOST} old-site.com [NC] RewriteRule ^/legacy-page\.html$ - [R=410,L]
重定向上线后务必批量验证:
用工具(如 Screaming Frog、curl 或自写脚本)检查一批旧 URL,确认返回状态码是 301、Location 头指向正确新地址、最终能加载 200 页面,并且新页 <link rel="canonical"> 指向自身。










