apache旧文章跳转核心是用rewriterule精准映射路径,按需选择[r=301,l]外部重定向(地址更新、seo友好)或[l]内部重写(地址不变),须确保mod_rewrite启用、allowoverride all且重启服务,正则需转义特殊字符并加$锚定结尾以防误匹配。

Apache URL 重写实现旧文章跳转,核心是用 RewriteRule 把旧路径精准映射到新地址,同时根据场景选择“内部重写”(浏览器地址不变)或“外部重定向”(地址栏更新、SEO 友好)。关键不在写多少规则,而在于匹配准确、状态码得当、不引发循环。
明确跳转类型:内部重写 vs 外部重定向
旧文章迁移后,用户访问 /article/old-123.html,你希望:
-
用户和搜索引擎都看到新地址 → 用
[R=301,L]做永久重定向。这是最常见做法,利于 SEO 权重继承; -
只改后台处理逻辑,不暴露新路径 → 用
[L]或[PT]内部重写,浏览器地址栏保持不变,适合临时兼容或隐藏真实结构。
常用跳转写法(.htaccess 或虚拟主机配置中)
假设旧文章 URL 是 /post/2020/05/my-old-title.html,新地址是 /articles/123 或 /news/detail?id=123:
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
- 跳转到新静态路径(推荐):
RewriteRule ^post/2020/05/my-old-title\.html$ /articles/123 [R=301,L] - 跳转到带参数的 PHP 页面:
RewriteRule ^post/2020/05/my-old-title\.html$ /news/detail.php?id=123 [R=301,L] - 批量匹配年月归档(正则更灵活):
RewriteRule ^post/2020/05/(.+)\.html$ /articles/123?from=$1 [R=301,L] - 内部重写(地址栏不变):
RewriteRule ^post/2020/05/my-old-title\.html$ /index.php?route=article&id=123 [L]
必须检查的前置条件
规则写对了却没生效?大概率卡在这三步:
- 确认
mod_rewrite已启用:a2enmod rewrite(Ubuntu/Debian)或检查httpd.conf中LoadModule rewrite_module是否已取消注释; - 确保目录允许覆盖:
<directory> AllowOverride All </directory>,否则 .htaccess 不被读取; - 重启 Apache:
systemctl restart apache2(Linux)或httpd -k restart(CentOS),修改配置后必须重启才生效。
避坑提醒
实际部署时容易忽略但影响严重的细节:
- 正则末尾加
$:写成^post/123\.html$而不是^post/123\.html,避免误匹配/post/123.html-bak; - 特殊字符要转义:
.、?、+等在正则中有含义,需写成\.、\?; - 测试别只用浏览器:清空缓存或用
curl -I http://yoursite.com/post/123.html查看真实返回状态码(应为 301); - 避免循环:比如旧路径含
index.php,新路径又触发同一条规则,会导致 500 错误或重定向次数超限。










