Htaccess重定向生成器

每次迁移博客、更改URL方案或整合旧页面时,Apache的.htaccess文件都需要承担主要的配置清理工作。该生成器可将简单的源地址与目标地址映射转换为正确的RewriteRule指令,并附带相应的参数标记,可直接插入网站的.htaccess文件中使用。

如何生成重定向规则

  1. 1

    选择重定向类型

    301永久重定向用于符合SEO规范的页面迁移;302临时重定向用于A/B测试及季节性页面跳转。

  2. 2

    输入源和目标

    精确的路径或正则表达式模式:旧路径将成为RewriteRule模式,新URL将成为重定向目标。

  3. 3

    检查标志

    每条规则都会自动获得正确的标志(`[R=301,L]`或`[R=302,L]`),因此生成的代码可直接与mod_rewrite配合使用。

  4. 4

    复制指令

    生成的代码块将插入到 .htaccess 文件的 `<IfModule mod_rewrite.c>` 区段中。

`mod_rewrite` 与 `mod_alias` 指令

Apache 提供了两个用于重定向的模块,具体选择取决于规则的复杂性。

决策指南

要求 使用 示例
精确的旧网址 → 精确的新网址 Redirect Redirect 301 /old /new
通配符前缀 RedirectMatch RedirectMatch 301 ^/blog/(.*)$ /articles/$1
查询字符串匹配 RewriteRule 详见下文
强制使用 HTTPS RewriteRule RewriteCond %{HTTPS} off + 规则
条件性(浏览器、Cookie) RewriteRule RewriteCond 结合使用

示例:强制使用带有 www 的 HTTPS

RewriteEngine On
RewriteCond %{HTTPS} off [OR]
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule ^ https://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

示例:将 /blog/post-123 移动到 /articles/post-123

RewriteEngine On
RewriteRule ^blog/(.*)$ /articles/$1 [L,R=301]

您将看到的标志

  • L,最后,不再继续处理后续规则。
  • R=301R=302,使用该状态码进行重定向。
  • NC,不区分大小写。
  • QSA,将原始查询字符串附加到新URL中。
  • NE,不要在目标文件中重新编码特殊字符。

常见错误

  • 忘记 RewriteEngine On,若缺少该指令,任何 RewriteRule 都无法生效。
  • 默认使用 302 重定向,谷歌将其视为临时重定向,因此原有 URL 仍会保持排名。
  • 链式重定向(旧地址 → 中间地址 → 最终地址),应始终力求单跳跳转;每增加一跳都会损失链接权重并增加延迟。

常见问题

使用 301 状态码进行永久性操作:网站迁移、URL 格式变更、HTTPS 升级。仅在临时情况下使用 302 状态码,例如重定向至维护页面或实施 A/B 测试。搜索引擎会通过 301 状态码传递排名信号,而通过 302 状态码则无法可靠传递该信号。

最常见的原因是忘记识别模式中的起始斜杠。在 RewriteRule 中,模式匹配的是不含起始斜杠的路径(例如 ^blog/);而在 Redirect (mod_alias) 中,模式则以斜杠开头(例如 /blog)。请勿混淆这两种规则规范。

是的,请在使用 RewriteRule 之前先使用 RewriteCond %{QUERY_STRING} ^id=123$。普通重定向不会读取查询字符串;只有 RewriteRule 能够对其进行匹配。

是的,在后续请求中,Apache会逐次读取 .htaccess 文件,无需重启服务器。若未出现任何异常,请检查该目录对应的 vhost 中是否已设置 AllowOverride All

相关工具

此工具还提供其他语言版本