要在 带有静态资源的 Worker 上应用自定义重定向,请在项目的静态资源目录中声明一个名为 _redirects 的无扩展名纯文本文件。此文件本身不会作为静态资源提供,而是由 Workers 解析,其规则将应用于静态资源响应。
如果你使用框架,通常会有一个名为 public/ 或 static/ 的目录,其中通常包含可部署的资源,例如 favicon、robots.txt 文件和站点清单。这些文件在构建期间会复制到最终输出目录,因此这是编写 _redirects 文件的理想位置。如果你不使用框架,_redirects 文件可以直接放入你的静态资源目录。
每行只能定义一个重定向,必须遵循以下格式,否则将被忽略。
[source] [destination] [code?]sourcestringrequireddestinationstringrequiredcodenumber(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=:nameCloudflare 目前对高级重定向提供有限支持。
| 功能 | 支持 | 示例 | 说明 |
|---|---|---|---|
| 重定向(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 之前执行,因此若请求同时匹配两个文件中的规则,重定向将优先。
匹配时,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 文件最多包含 2,000 个静态重定向和 100 个动态重定向,合计 2,100 个重定向。使用 Bulk Redirects 处理超出 _redirects 2,100 条重定向规则限制的重定向。
要使用 Bulk Redirects,请参阅 Bulk Redirects 仪表板文档或 Bulk Redirects API 文档。