跳转到内容
搜索文档

重定向

最后更新 查看 MarkdownAgent 设置

使用 _redirects 文件为 Cloudflare Pages 站点定义 URL 重定向。

要在 Cloudflare Pages 上应用自定义重定向,请在项目的静态资源目录中声明一个名为 _redirects 的无扩展名纯文本文件。此文件本身不会作为静态资源提供,而是由 Cloudflare Pages 解析,其规则将应用于静态资源响应。

如果你使用框架,通常会有一个名为 public/static/ 的目录,其中通常包含可部署的资源,例如 favicon、robots.txt 文件和站点清单。这些文件在构建期间会复制到最终输出目录,因此这是编写 _redirects 文件的理想位置。如果你不使用框架,_redirects 文件可以直接放入你的构建输出目录

结构

每行

每行只能定义一个重定向,必须遵循以下格式,否则将被忽略。

[source] [destination] [code?]
  • source stringrequired

    • 文件路径。
    • 可包含通配符(*占位符
    • 由于 fragment 由浏览器而非 Cloudflare 网络评估,source 中的任何 fragment 都不会被评估。
  • destination stringrequired

    • 文件路径或外部链接。
    • 可包含 fragment、查询字符串、splats占位符
  • code number(default: 302) optional

    • 可选参数

# 开头的行将被视为注释。

每个文件

_redirects 文件限制为 2,000 个静态重定向和 100 个动态重定向,合计最多 2,100 个重定向。每个重定向声明有 1,000 字符限制。

_redirects 文件中:

  • 重定向顺序很重要。若同一 source 路径有多个重定向,最上面的重定向生效。
  • 静态重定向应出现在动态重定向之前。
  • 无论是否有资源匹配传入请求,重定向始终会被执行。

包含多个重定向的完整示例如下:

/home301 / 301
/home302 / 302
/querystrings /?query=string 301
/twitch https://twitch.tv
/trailing /trailing/ 301
/notrailing/ /nottrailing 301
/page/ /page2/#fragment 301
/blog/* https://blog.my.domain/:splat
/products/:code/:name /products?code=:code&name=:name

高级重定向

Cloudflare 目前对高级重定向提供有限支持。

功能 支持 示例 说明
重定向(301、302、303、307、308) /home / 301 302 为默认状态码。
重写(其他状态码) /blog/* /blog/404.html 404
Splats /blog/* /posts/:splat 请参阅 Splats
占位符 /blog/:year/:month/:date/:slug /news/:year/:month/:date/:slug 请参阅 Placeholders
查询参数 /shop id=:id /blog/:id 301
代理 /blog/* /news/:splat 200 请参阅 Proxying
域名级重定向 workers.example.com/* workers.example.com/blog/:splat 301
按国家或语言重定向 / /us 302 Country=us
按 Cookie 重定向 /\* /preview/:splat 302 Cookie=preview

重定向与 header 匹配

重定向在 header 之前执行,因此若请求同时匹配两个文件中的规则,重定向将优先。

Splats

匹配时,splat(星号 *)将贪婪匹配所有字符。URL 中只能包含一个 splat。

匹配的值可在重定向位置中使用 :splat

占位符

占位符可以使用 :placeholder_name 定义。冒号(:)后跟字母表示占位符的开始,其后的占位符名称必须由字母数字字符和下划线组成(:[A-Za-z]\w*)。每个命名占位符只能引用一次。占位符匹配除分隔符之外的所有字符;当分隔符是主机的一部分时,分隔符是句点(.)或正斜杠(/),当分隔符是路径的一部分时,分隔符只能是正斜杠(/)。

同样,匹配的值可以在 redirect 值中使用 :placeholder_name

/movies/:title /media/:title

代理

代理仅支持站点上的相对 URL。无法代理外部域名。

文件中只有第一个重定向会生效。例如,在以下示例中,对 /a 的请求将渲染 /b,对 /b 的请求将渲染 /c,但 /a 不会渲染 /c

/a /b 200
/b /c 200

超出 _redirects 限制

_redirects 文件最多包含 2,000 个静态重定向和 100 个动态重定向,合计 2,100 个重定向。使用 Bulk Redirects 处理超出 _redirects 2,100 条重定向规则限制的重定向。

要使用 Bulk Redirects,请参阅 Bulk Redirects 仪表板文档Bulk Redirects API 文档

相关资源

这篇文档对您有帮助吗?