apache 301重定向写法需按场景选择:单页用redirect指令(如redirect 301 /old.html /new.html),全站跳转用rewritecond+rewriterule组合匹配域名并保留路径,复杂映射用正则提取变量,务必启用mod_rewrite、设置rewriteengine on,并用[r=301,l,nc]确保永久重定向与规则终止。

Apache 301 重定向写法取决于你要跳转的范围和精度:单页、目录、整站,还是带参数/正则匹配的复杂场景。核心是选对指令(Redirect 或 RewriteRule),并确保语法正确、状态码明确为 301。
单页或简单路径跳转(推荐用 Redirect)
适合一对一映射,无需开启重写引擎,简洁安全:
-
Redirect 301 /old-page.html /new-page.html(同域名内跳转) -
Redirect 301 /old-contact.php https://example.com/contact(跨域跳转,自动带 HTTPS) -
Redirect 301 /blog/ https://example.com/articles/(目录级跳转,末尾斜杠必须一致)
⚠️ 注意:Redirect 是路径前缀匹配,不是正则;它会自动保留查询参数(如 ?utm=source),无需额外处理。
域名级全站跳转(用 RewriteCond + RewriteRule)
适用于 old-site.com → new-site.com 这类整站迁移,需精准匹配主机名:
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
- 确保虚拟主机配置中已启用:
RewriteEngine On - 添加条件判断旧域名(含 www 和无 www):
RewriteCond %{HTTP_HOST} ^(www\.)?old-site\.com$ [NC] - 执行跳转,保留原始路径:
RewriteRule ^(.*)$ https://new-site.com$1 [R=301,L]
✅ [NC] 表示不区分大小写,[R=301] 明确返回永久重定向,[L] 表示终止后续规则——这三项缺一不可。
旧路径结构批量映射(混合 Redirect 和 RewriteRule)
老旧站点常有大量 /old/news/123.html → /news/2024/123 的结构变更,建议分层管理:
- 简单路径映射优先用
Redirect 301,例如:Redirect 301 /old/about.html /about - 需要正则提取变量时用
RewriteRule,例如:RewriteRule "^/old/blog/(\d+)-(.*)\.html$" "/articles/$1/$2" [R=301,L] - 所有 RewriteRule 必须在
RewriteEngine On开启的前提下生效,且不能重复写该指令
? 小技巧:把这类规则单独存为 /etc/apache2/redirects/legacy.conf,再用 Include 引入,方便维护和版本控制。
必须检查的几个关键点
-
mod_rewrite 是否启用:Ubuntu/Debian 执行
a2enmod rewrite;CentOS 检查httpd.conf中LoadModule rewrite_module modules/mod_rewrite.so是否取消注释 -
AllowOverride 设置:若用
.htaccess,对应目录必须设AllowOverride All;若写在主配置或虚拟主机里,则无需此设置 -
配置后重载服务:执行
sudo systemctl reload apache2(Debian/Ubuntu)或sudo systemctl reload httpd(CentOS/RHEL) -
避免循环跳转:比如新旧规则互相触发,可用 curl -I 测试响应头是否返回
HTTP/1.1 301 Moved Permanently及正确 Location










