Rules language 支持两种表达式:简单表达式和复合表达式。
简单表达式 (Simple expressions) 将 HTTP 请求中的值与表达式中定义的值进行比较。例如,此简单表达式匹配 Microsoft Exchange Autodiscover 请求:
http.request.uri.path matches "/autodiscover\.(xml|src)$"简单表达式具有以下语法:
<field> <comparison_operator> <value>其中:
-
字段 (Fields) 指定与 HTTP 请求关联的属性。
-
比较运算符 (Comparison operators) 定义值必须如何与实际请求数据相关联,表达式才能返回
true。 -
值 (Values) 表示与字段关联的数据。在评估规则时,Cloudflare 将这些值与从请求中获得的实际数据进行比较。
复合表达式 (Compound expressions) 使用逻辑运算符 (logical operators)(如 and)将两个或多个表达式组合成一个表达式。
例如,此表达式使用 and 运算符定位到目标为 www.example.com 且不在端口 80 或 443 上的请求:
http.host eq "www.example.com" and not cf.edge.server_port in {80 443}复合表达式具有以下通用语法:
<expression> <logical_operator> <expression>复合表达式允许您生成复杂的、高度针对性的规则。
规则表达式的最大长度为 4,096 个字符。
无论您是使用可视化 Expression Builder 定义表达式,还是在 Expression Editor 中手动编写表达式,此限制都适用。
每个规则在其表达式中最多可以包含 64 个正则表达式。此限制适用于所有使用 Rules language 的规则类型。
超过此限制的规则无法被创建或更新。超出此限制的现有规则将继续起作用,但在简化表达式之前无法进行修改。
您还可以在表达式中使用以下 Rules language 功能:
-
分组符号 (Grouping symbols) 允许您显式地对应该一起评估的表达式进行分组。
-
函数 (Functions) 允许您在表达式中操作和验证值。