在 Cloudflare Pages Functions 项目中,_routes.json 用于 定义哪些请求应该由 Functions 处理,哪些应该直接返回静态文件。
在官方文档中有付费提示:
vbnet
On a purely static project, Pages offers unlimited free requests. However, once you add Functions on a Pages project, all requests by default will invoke your Function. To continue receiving unlimited free static requests, exclude your project's static routes by creating a `_routes.json` file.
_routes.json的使用方法
-
在
functions/目录下创建_routes.json文件(如果没有)。 -
编写路由规则,格式如下:
jsonjson 复制编辑 { "version": 1, "include": ["/api/*"], "exclude": ["/static/*"] }"include":匹配这些路径的请求会由 Functions 处理。"exclude":这些路径的请求会直接返回静态文件,而不会触发 Functions。
示例
示例 1:让 /api/ 目录下的所有请求交给 Functions 处理
json
json
复制编辑
{
"version": 1,
"include": ["/api/*"]
}
📌 效果:
/api/user→ 由 Cloudflare Pages Functions 处理/index.html→ 返回静态文件(不触发 Functions)
示例 2:只让 /api/ 目录下的请求交给 Functions,静态资源除外
json
json
复制编辑
{
"version": 1,
"include": ["/api/*"],
"exclude": ["/api/static/*"]
}
📌 效果:
/api/data→ 由 Functions 处理/api/static/image.png→ 返回静态文件
示例 3:排除某些路径,不让 Functions 处理
json
json
复制编辑
{
"version": 1,
"include": ["/*"],
"exclude": ["/assets/*", "/docs/*"]
}
📌 效果:
/home→ 由 Functions 处理/docs/tutorial.html→ 返回静态文件(不触发 Functions)/assets/logo.png→ 返回静态文件
常见问题
-
必须包含
"include"吗?是的,
include不能为空,否则 Functions 不会生效。 -
如果没有
_routes.json会怎样?
默认所有请求都会执行 Functions,如果你只想处理 API 请求,最好手动配置。 -
Cloudflare Pages Functions 适用于哪些场景?
- 处理 API 请求(
/api/) - 服务器端渲染(SSR)
- 保护某些资源(认证、权限控制)
- 处理 API 请求(
include 和 exclude 共同决定了哪些路径会触发 Cloudflare Pages Functions,它们的关系如下:
1. 只写 include(不写 exclude)
只有
include中指定的路径会触发 Functions,其余路径默认不会触发。
示例
json
{
"version": 1,
"include": ["/api/*"]
}
📌 效果:
/api/user→ ✅ 触发 Functions/api/orders/123→ ✅ 触发 Functions/index.html→ ❌ 直接返回静态文件/assets/logo.png→ ❌ 直接返回静态文件
2. 只写 exclude(不写 include)
默认所有路径都会触发 Functions,
exclude指定的路径不会触发。
示例
json
{
"version": 1,
"exclude": ["/static/*"]
}
📌 效果:
/api/data→ ✅ 触发 Functions/home→ ✅ 触发 Functions/static/image.png→ ❌ 直接返回静态文件
3. include + exclude 同时使用
include先生效,exclude会从include里剔除路径。
示例
json
{
"version": 1,
"include": ["/*"],
"exclude": ["/static/*", "/docs/*"]
}
📌 效果:
/api/data→ ✅ 触发 Functions/home→ ✅ 触发 Functions/static/image.png→ ❌ 直接返回静态文件/docs/index.html→ ❌ 直接返回静态文件
总结
| 规则写法 | 触发 Functions | 不触发 Functions |
|---|---|---|
只写 include |
只有 include 里的路径 |
其他路径默认不触发 |
只写 exclude |
除了 exclude 里的路径,其他都触发 |
exclude 里指定的路径 |
同时写 include 和 exclude |
include 里的路径,去掉 exclude 指定的 |
exclude 里指定的 |
🔹 建议
- 只想让部分 API 请求触发 Functions?👉 使用
include(比如/api/*)。 - 想让大部分请求触发 Functions,只有少数路径例外?👉 使用
exclude(比如/static/*)。 - 想要更精准控制?👉 同时使用
include和exclude。 _routes.json控制哪些请求由 Cloudflare Pages Functions 处理,哪些返回静态文件。include定义需要触发 Functions 的路径,exclude定义不触发的路径。- 合理配置
_routes.json可以提高性能,避免不必要的计算资源消耗。