跳转到内容
搜索文档

规则

最后更新 查看 MarkdownAgent 设置

规则定义过滤器,以及对匹配该过滤器的传入请求执行的操作。

  • 规则的 表达式(也称为过滤表达式)定义规则的作用范围。
  • 规则的 操作 定义在表达式匹配时发生的行为。

规则表达式使用 Rules language 定义。

例如,考虑以下包含四条规则(R1、R2、R3 和 R4)的规则集。对于某个传入请求,前两条规则的表达式与请求属性匹配。因此,这些规则的操作会运行(分别为 ExecuteLog)。第一条规则的操作会执行托管规则集,这意味着该托管规则集中的每条规则都会被评估。第二条规则的操作会记录与当前阶段关联的事件。规则 3 和 4 的表达式不匹配,因此其操作不会运行。由于没有规则阻止该请求,请求会进入下一阶段。

规则执行场景示例。定义了一个包含四条规则的规则集,其中第一条规则执行托管规则集。

通过特定的 Cloudflare 产品,规则可以具备额外功能。您可能拥有更多可用于规则表达式的字段、可执行不同操作,或在给定阶段配置额外行为。

规则评估

评估规则时,Cloudflare 会将请求/响应属性的值或派生值(通过 字段 获得)与规则过滤表达式中定义的值进行比较。

如果整个表达式的求值结果为 true,则规则匹配,Cloudflare 会触发规则中配置的 操作。如果表达式求值结果为 false,则规则不匹配,不会应用其配置的操作。

一般来说,对于非终止动作,同一阶段中规则所做的最后一次更改将生效(后续规则可以覆盖之前规则所做的更改)。但对于终止动作(BlockRedirect 或任一质询动作),规则评估将停止,并立即执行该动作。

例如,如果多个带有 Redirect 动作的规则匹配,Cloudflare 将始终使用第一条匹配规则的 URL 重定向。此外,如果您使用不同的 Cloudflare 产品(单次重定向和批量重定向)配置 URL 重定向,在规则匹配的情况下,最先执行的产品将生效(此处为单次重定向)。

有关产品执行顺序,请参阅阶段列表

当您使用 true 作为规则过滤表达式时,表示“在当前 阶段 级别将规则应用于每个传入请求”,该级别可以是 zone 或账户。

规则评估期间的字段值

在对给定请求/响应评估规则时,所有请求和响应 字段 的值在每个阶段内是不可变的。但是,字段值可能在不同阶段之间发生变化。

例如:

  • 如果 URL 重写规则 #1 更新了请求的 URI 路径或查询字符串,URL 重写规则 #2 不会考虑这些先前的更改。
  • 如果 请求标头转换规则 #1 设置了 HTTP 请求标头的值,请求标头转换规则 #2 将无法读取或评估该新值。
  • 如果 URL 重写规则更新了请求的 URI 路径或查询字符串,则在 http_request_transform 阶段(执行 URL Rewrite Rules 的阶段)之后的阶段中,http.request.urihttp.request.uri.*http.request.full_uri 字段将具有不同的值。

这篇文档对您有帮助吗?