Apache httpd.conf 中配置重定向需启用 mod_rewrite 模块和 RewriteEngine On,按顺序编写 RewriteRule 规则,支持单路径、批量正则及跨域重定向,状态码推荐先测 302 再切 301。

在 Apache 的 httpd.conf 中配置重定向,核心是使用 RewriteRule 搭配 RewriteEngine On,并确保 mod_rewrite 已启用。重定向必须明确源路径、目标地址和响应状态码(如 301 永久重定向),且规则顺序很重要——靠前的规则会优先匹配并可能终止后续处理。
确认 mod_rewrite 已加载并启用重写引擎
检查 httpd.conf 中是否已启用重写模块:
- 查找类似
LoadModule rewrite_module modules/mod_rewrite.so的行,确保未被注释(即前面没有#) - 在需要应用重定向的上下文(如
<VirtualHost>、<Directory>或全局配置段)中,添加或确认存在:RewriteEngine On - 若在
<Directory>块中使用,还需确保AllowOverride允许重写,例如:AllowOverride All或至少包含FileInfo
单条旧链接到新链接的 301 重定向
适用于已知具体旧 URL 路径,需精确跳转到新 URL 的场景(如文章改版、页面迁移):
Apache 2.4.62 官方 tar.gz 源码包是 Linux 及类 Unix 系统构建 Web 服务器的核心基础。通过源码编译安装,开发者能够灵活定制模块、优化性能并精准控制安装路径,满足多样化的业务需求。
- 语法示例(重定向
/old-page.html到/new-section/intro.html):RewriteRule ^/old-page\.html$ /new-section/intro.html [R=301,L] -
^/old-page\.html$是正则表达式:开头^、结尾$确保完全匹配;点号\.需转义 -
[R=301,L]表示返回 301 状态码,L表示这是最后一条规则,不再匹配后续规则 - 注意:如果配置在虚拟主机根目录下,
RewriteRule的匹配路径默认不带域名,只匹配 URI 路径(如/old-page.html),不包含协议和主机名
批量路径迁移的正则重定向
当多个旧路径遵循统一模式(如旧栏目名整体更换),可用正则捕获+重用简化配置:
- 示例:将所有
/blog/xxx改为/articles/xxxRewriteRule ^/blog/(.*)$ /articles/$1 [R=301,L] -
(.*)捕获路径剩余部分,$1在右侧引用该内容 - 若需保留查询参数(如
?ref=abc),默认会自动继承;如需显式控制,可加QSA标志(但通常非必需) - 测试时建议先用
R=302(临时重定向),确认无误后再改为301,避免浏览器缓存干扰验证
重定向到外部域名或带协议的完整 URL
当目标不在当前站点时,RewriteRule 目标需写成完整 URL(含 https://):
- 示例:将旧子域全部跳转到新主站
RewriteRule ^/(.*)$ https://newsite.com/$1 [R=301,L] - 注意:此时目标必须以
http://或https://开头,否则 Apache 会当作本地路径处理 - 若旧链接含查询字符串且需透传,上述写法默认保留;如需清除参数,可在末尾加
QSD(Require Apache 2.4.26+)或用?截断(如https://newsite.com/$1?)

















