跳转到内容
搜索文档

创建自定义错误规则

最后更新 查看 MarkdownAgent 设置

在仪表板中

创建自定义错误规则

  1. 在 Cloudflare 仪表板中,前往 Rules Overview(概览) 页面。

    Go to Overview ↗
  2. 选择 Create rule(创建规则) > Custom Error Rule(自定义错误规则)

  3. Rule name(规则名称) 中为规则输入描述性名称。

  4. If incoming requests match(如果传入请求匹配) 下,选择以下选项之一:

    • Custom filter expression(自定义过滤表达式):规则仅应用于匹配自定义表达式的流量。定义规则表达式 以配置应重写哪些请求。使用 Expression Builder 或 Expression Editor 定义自定义表达式。更多信息请参阅 在仪表板中编辑表达式

    • All incoming requests(所有传入请求):规则将应用于状态代码为 400 及以上的所有响应,Cloudflare 安全产品发出的 block 与 challenge 操作除外。

  5. Deliver a custom error response(交付自定义错误响应) 中,选择响应类型(Custom error asset 或可用的内联响应之一)。

    若选择 Custom error asset,请在 Asset(资源) 中选择现有自定义错误资源,或选择 Create new asset(创建新资源)创建新的自定义错误资源

    若选择 JSON responseHTML responseText responseXML response,请分别在 JSON responseHTML responseText responseXML response 中输入要发送给网站访客的自定义错误响应。 响应可包含 error tokens,Cloudflare 会在将响应发送给访客前将其替换为实际值。最大响应大小为 10 KB。

  6. (可选)在 Response code(响应代码) 中输入响应的 HTTP 状态代码(介于 400999 之间的整数值)。若提供,此值将覆盖当前响应状态代码。

  7. (可选)在 Place at(放置位置) 下,定义规则在规则列表中的位置:列表中的第一条规则、最后一条规则,或自定义位置(在给定规则之后)。

  8. 要保存并部署规则,选择 Deploy(部署)。若尚未准备好部署规则,选择 Save as Draft(保存为草稿)

创建自定义错误资源

  1. Create Custom Error Asset(创建自定义错误资源) 侧边栏中,在 Asset name(资源名称) 中输入资源名称。
  2. (可选)在 Description(描述) 中输入资源描述。
  3. URL(网址) 中,输入你希望获取并存储在 Cloudflare 全球网络中的页面 URL。Cloudflare 将获取所有页面资源,并存储你可在一条或多条自定义错误规则中使用的页面精简版本。
  4. 选择 Save(保存)

要查看现有自定义错误资源,请前往 Rules(规则) > Settings(设置) > Custom Error Assets(自定义错误资源) 选项卡。

通过 API

要通过 API 配置自定义错误规则:

  1. (可选)基于你提供的 URL 创建自定义错误资源
  2. 使用 Rulesets APIhttp_custom_errors 阶段创建自定义错误规则

创建自定义错误资源

以下 POST 请求基于提供的 URL 在 zone 中创建新的自定义错误资源:

curl "https://api.cloudflare.com/client/v4/zones/$ZONE_ID/custom_pages/assets" \
--header "Authorization: Bearer <API_TOKEN>" \
--json '{
  "name": "500_error_template",
  "description": "Standard 5xx error template page",
  "url": "https://example.com/errors/500_template.html"
}'
{
	"result": {
		"name": "500_error_template",
		"description": "Standard 5xx error template page",
		"url": "https://example.com/errors/500_template.html",
		"last_updated": "2025-02-10T11:36:07.810215Z",
		"size_bytes": 2048
	},
	"success": true
}

创建自定义错误规则

通过 API 创建自定义错误规则时,请确保:

  • 将规则操作设为 serve_error
  • 根据响应类型在 action_parameters 字段中定义规则参数
  • 将规则部署到 http_custom_errors 阶段。

http_custom_errors 阶段 ruleset 中第一条匹配的规则将被应用。ruleset 中的其他规则将不会被匹配或应用。此外,在 zone 级别定义的自定义错误规则优先于在账户级别定义的规则。

一般流程

按此工作流通过 API 为给定 zone 创建自定义错误规则:

  1. 使用 List zone rulesets 操作检查 zone 级别是否已有 http_custom_errors 阶段的 ruleset。

  2. 若阶段 ruleset 不存在,请使用 Update a zone entry point ruleset 操作创建它,该操作允许你在 ruleset 不存在时创建它,并更新 ruleset 中的所有规则。在 http_custom_errors 阶段创建 ruleset。

    若阶段 ruleset 已存在,请使用 Update a zone entry point ruleset 操作替换 ruleset 中的所有规则,或使用 Add a rule to a ruleset 操作向 ruleset 中的现有规则添加规则。

要在账户级别创建自定义错误规则,请使用相应的账户级 API 端点。

示例

此示例配置一条自定义错误规则,对 HTTP 状态代码为 500 的响应返回先前创建的自定义错误资源 500_error_template

Required API token permissions

At least one of the following token permissions is required:
  • Response Compression Write
  • Config Settings Write
  • Dynamic URL Redirects Write
  • Cache Settings Write
  • Custom Errors Write
  • Origin Write
  • Managed headers Write
  • Zone Transform Rules Write
  • Mass URL Redirects Write
  • Magic Firewall Write
  • L4 DDoS Managed Ruleset Write
  • HTTP DDoS Managed Ruleset Write
  • Sanitize Write
  • Transform Rules Write
  • Select Configuration Write
  • Bot Management Write
  • Zone WAF Write
  • Account WAF Write
  • Account Rulesets Write
  • Logs Write
  • Logs Write
Update a zone entry point rulesetbash
curl "https://api.cloudflare.com/client/v4/zones/$ZONE_ID/rulesets/phases/http_custom_errors/entrypoint" \
	--request PUT \
	--header "Authorization: Bearer $CLOUDFLARE_API_TOKEN" \
	--json '{
		"rules": [
				{
						"ref": "serve_500_template",
						"action": "serve_error",
						"action_parameters": {
								"asset_name": "500_error_template",
								"content_type": "text/html"
						},
						"expression": "http.response.code eq 500",
						"enabled": true
				}
		]
	}'

使用 Terraform 时,通过 ref 字段可在更新后保持稳定的规则 ID。添加该字段可防止 Terraform 在变更时重建规则。更多信息请参阅 故障排除(Terraform 文档)。

PUT 请求对应 Update a zone entry point ruleset 操作,会替换 http_custom_errors 阶段入口点 ruleset 中的任何现有规则。

所需的 API token 权限

用于管理 Custom Error Rules 与 Custom Error Assets 的 API 请求中的 API token 必须至少具有以下权限:

  • Custom Error Rules > Edit

这篇文档对您有帮助吗?