重定向
要在 Cloudflare 页面上使用重定向,请在项目输出文件夹中名为 _redirects
(不含文件扩展名)的纯文本文件中声明重定向。构建输出文件夹 是特定于项目的,因此 _redirects
文件不应总是位于版本库的根目录中。重定向的更改会在构建时更新到网站上,因此请确保每次更新重定向时都提交并推送文件,以触发新的构建。
结构
每行
每行只能定义一个重定向,且必须遵循此格式,否则将被忽略。
-
source
-
destination
- 文件路径或外部链接。
- 可包括片段、查询字符串、splats和placeholders。
-
code
- 可选参数
以 #
开头的行将被视为注释。
每个文件
一个项目只能有 2,000 个静态重定向和 100 个动态重定向,合计 2,100 个重定向。每个重定向声明有 1000 个字符的限制。
重定向 “文件中:
- 重定向的顺序很重要。如果同一 “源 “路径有多个重定向,则应用最上层的重定向。
- 静态重定向应出现在动态重定向之前。
- 无论资产是否与接收到的请求相匹配,重定向都会被跟踪。
包含多个重定向的完整示例如下:
高级重定向
Cloudflare 目前为高级重定向提供有限的支持。未来将增加更多支持。
Feature | Support | Example | Notes |
---|---|---|---|
Redirects (301, 302, 303, 307, 308) | Yes | /home / 301 |
302 is used as the default status code. |
Rewrites (other status codes) | No | /blog/* /blog/404.html 404 |
|
Splats | Yes | /blog/* /posts/:splat |
Refer to Splats. |
Placeholders | Yes | /blog/:year/:month/:date/:slug /news/:year/:month/:date/:slug |
Refer to Placeholders. |
Query Parameters | No | /shop id=:id /blog/:id 301 |
|
Proxying | Yes | /blog/* /news/:splat 200 |
Refer to Proxying. |
Domain-level redirects | No | workers.example.com/* workers.example.com/blog/:splat 301 |
|
Redirect by country or language | No | / /us 302 Country=us |
|
Redirect by cookie | No | /\* /preview/:splat 302 Cookie=preview |
重定向和标头匹配
重定向在头文件之前执行,因此如果请求同时符合两个文件中的规则,重定向将胜出。
Splats
在匹配时,溅射符号(星号,*
)将贪婪地匹配所有字符。你只能在 URL 中包含一个溅字符。
匹配的值可与 :splat
一起用于重定向位置。
占位符
可以使用 :placeholder_name
定义占位符。冒号 (:
)后面跟一个字母表示占位符的开始,后面的占位符名称必须由字母数字字符和下划线 (:[A-Za-z]/w*
)组成。每个已命名的占位符只能被引用一次。占位符匹配除分隔符以外的所有字符,分隔符在作为主机的一部分时是句号 (.
) 或正斜线 (/
),在作为路径的一部分时只能是正斜线 (/
)。
同样,匹配的值可以通过 :placeholder_name
在 redirect 值中使用。
代理
代理只支持网站上的相对 URL。你不能代理外部域。
只有第一个重定向才适用。例如,在下面的示例中,向 /a
提出的请求将呈现 /b
,向 /b
提出的请求将呈现 /c
,但 /a
不会呈现 /c
。
超过_重定向
限制
一个 _redirects
文件最多可包含 2,000 个静态重定向和 100 个动态重定向,合计 2,100 个重定向。使用 Bulk Redirects处理超过 Pages 设置的 2,100 重定向规则限制的重定向。
要使用批量重定向,请参阅 批量重定向仪表板文档 或 批量重定向 API 文档。