使用方法
- 在 旧地址或路径 中输入旧地址或路径,例如 /old-page/。
- 在 新地址 中输入新地址,然后选择 重定向类型 和 要重定向的内容。
- 选择 服务器或平台。结果中会显示代码,并附有复制和下载按钮。
- 把文件保存到服务器上,然后用请求工具检查每个重定向,之后再依赖它。
规则如何匹配
路径规则匹配您输入的路径,并把访问者带到新地址。页面规则只匹配该页面,无论末尾是否带斜杠。文件夹规则匹配该文件夹及其下的所有地址,并把路径的其余部分带到新文件夹。
主机规则匹配旧地址的主机名。域名规则把路径和查询字符串带到新域名的相同路径。http 转 https 规则匹配通过 http 发出的请求,两条 www 规则各自匹配一个主机名。
- 服务器规则会保留查询字符串,因此 /old-page/?ref=1会变成 /new-page/?ref=1。
- 正则表达式由路径生成:其中的点、方括号和其他特殊字符都会被转义,因此规则只匹配您输入的文字。
选择哪一个状态码
Google 的重定向指南(英文)说:“301和308状态码表示页面已永久迁移到新位置。”它把302和307列为临时重定向,并把网站迁移到新域名列为典型情况:“您已将网站迁移到新域名,并希望过渡尽可能无缝。”它还补充:“当您确定重定向不会被撤销时,才使用永久重定向。”
永久重定向会告诉搜索引擎在结果中显示新地址。临时重定向会在结果中保留旧地址,这只适用于预期旧页面会回来的情况。
各服务器之间的差异
每个服务器书写重定向的方式不同,有些服务器并不接受所有状态码。本工具为每个服务器写出它支持的最接近的代码,并在结果中说明。
- IIS URL Rewrite 支持301、302、303和307,不支持308,因此在那里选择308会变成301。
- Netlify 记录的是用302代替307,并且没有列出308,因此307变为302,308变为301。
- Apache mod_alias 的 Redirect 匹配前缀,而 mod_rewrite 的 RewriteRule 只匹配您给出的精确路径。
- Cloudflare 单一重定向是控制面板中的规则。本工具展示其字段,但不会创建规则。
meta refresh 与 JavaScript:最后的选择
Google 的指南(英文)按 Google 正确解读它们的可能性排列重定向方式:先是服务器端重定向,然后是 meta refresh,最后是 JavaScript。Google 说,0秒的即时 meta refresh 会被解读为永久重定向,延迟的则被解读为临时重定向。
Google 的指南还说:“只有在无法使用服务器端或 meta refresh 重定向时,才使用 JavaScript 重定向。”它又补充,渲染可能失败,因此 Google 可能永远看不到 JavaScript 重定向。本工具生成的 HTML 中,301和308使用0秒的 meta refresh,302和307使用5秒的 meta refresh。
示例:一个页面以301迁移
在旧地址中输入 /old-page/,在新地址中输入 https://example.com/new-page/,重定向类型选301,要重定向的内容选单个页面。Apache 结果是下面的 RewriteRule 行,其他每个服务器都有自己的文件,目标相同。
该规则精确匹配该页面,无论末尾是否带斜杠,服务器规则都会保留查询字符串。Cloudflare 的字段为过滤表达式和静态目标,状态码为301。
| 服务器 | 文件 | 完成重定向的行 |
|---|---|---|
| Apache | .htaccess | RewriteRule ^old-page/?$ https://example.com/new-page/ [R=301,L,QSA] |
| nginx | nginx-redirect.conf | return 301 "https://example.com/new-page/$is_args$args"; |
| Caddy | Caddyfile | redir @page "https://example.com/new-page/{?query}" 301 |
| Netlify | _redirects | /old-page https://example.com/new-page/ 301 |
| Cloudflare | 控制面板字段 | 自定义过滤表达式:(http.request.uri.path eq "/old-page" or http.request.uri.path eq "/old-page/") |
| HTML 页面 | redirect.html | meta refresh 属性 content="0; url=https://example.com/new-page/" |
常见问题
应该使用301还是302?
当旧页面已永久迁移,希望搜索引擎显示新地址时,使用301。只有迁移是临时的时(例如维护期间),才使用302。
308和301一样吗?
两者都表示页面已永久迁移。308会保留请求方法,因此 POST 仍然是 POST,而301可能会把它变为 GET。IIS URL Rewrite 不支持308,因此本工具为 IIS 写出301。
为什么 Apache 的 Redirect 行覆盖的范围比 RewriteRule 更大?
Redirect 指令是前缀匹配:它也会把 /old-page/anything 发送到新地址。RewriteRule 只匹配精确的页面,这就是它在结果中是当前生效行的原因。
这个工具会把任何内容发送到我的服务器或 Cloudflare 吗?
不会。代码在您的浏览器中生成,您输入的内容不会离开页面。Cloudflare 规则必须在控制面板中手动创建,因此工具只列出其字段。
为什么 meta refresh 只是最后的选择?
Google 的指南对方法排序:服务器端重定向优先,然后是 meta refresh,JavaScript 排在最后。页面文件也只能把访问者带到一个地址,因此文件夹或整个域名需要服务器规则。
为什么 Netlify 会把307变为302?
Netlify 的重定向选项建议用302代替它不支持的307。文件中有一条注释说明了这一点。
资料来源
- Apache mod_alias:Redirect 状态值与前缀匹配(英文)
- Apache mod_rewrite:标志,包括 R=code(英文)
- nginx ngx_http_rewrite_module:return 与重定向代码(英文)
- Microsoft:URL Rewrite 模块配置参考,redirectType(英文)
- Caddy:redir 指令(英文)
- Netlify:重定向选项,状态码、末尾斜杠与域名级规则(英文)
- Cloudflare:Single Redirects 设置,状态码(英文)
- Google 搜索:重定向与 Google 搜索(英文)
数据和文字最近核对于2026年11月10日星期二。