在 Cloudflare 仪表板中,有两种编辑表达式的方式:
通常,您可以在 Expression Builder 和 Expression Editor 之间来回切换。然而,Expression Builder 不支持以下高级功能:
构建器可能也不会显示您正在编辑的表达式中可以使用的所有字段。
如果在编辑器中使用高级表达式功能或在表达式中输入未列出的字段,您可能无法切换到 Expression Builder。您将收到一个警告弹出窗口,说明构建器不支持该表达式。要继续操作,您可以放弃在编辑器中所做的任何更改,或者取消切换并继续在编辑器中工作。
Expression Builder 允许您通过使用下拉列表并输入字段值来直观地创建规则表达式,从而定义一个或多个子表达式。
Expression Preview(表达式预览) 会以文本形式显示表达式:
(ip.src.country ne "GB")当使用带引号的字符串语法 (quoted string syntax)时,Expression Builder 将自动转义字符串字面量中的反斜杠 (\) 和双引号 (") 特殊字符。
Expression Editor(表达式编辑器) 是一个纯文本界面,用于定义规则表达式,支持 Cloudflare Rules language的完整规范,包括将括号作为分组符号。
要访问 Expression Editor,请选择 Expression Preview(表达式预览) 旁边的 Edit expression(编辑表达式):
要从 Expression Editor 切换回 Expression Builder,请选择 Use expression builder(使用表达式构建器)。
在使用带引号的字符串语法 (quoted string syntax)的表达式中,字符串字面量中的所有反斜杠 (\) 和双引号 (") 字符都必须转义。可视化的 Expression Builder 将自动在前面加上反斜杠来转义这些特殊字符,这样 \ 和 " 就分别变成了 \\ 和 \"。
# Example of an expression with a " character written using quoted string syntax
http.request.uri.path eq "/foo\"bar"Expression Builder 同时支持带引号的字符串语法 (quoted string syntax)和原始字符串语法 (raw string syntax)。在原始字符串语法中,没有特殊字符或转义序列,因此直到结束定界符的所有字符都将按原样解释。
# Example of an expression with a " character written using the raw string syntax
http.request.uri.path eq r#"/foo"bar"#当您在仪表板的 Operator(运算符) 下拉菜单中选择 Matches regex(匹配正则表达式) 时,表达式预览将自动使用原始字符串语法。在其他情况下,您可能需要切换到 Expression Editor,使用原始字符串语法手动输入字符串。在这种情况下,切换回 Expression Builder 将保留您在编辑器中使用的语法。
当您使用带引号的字符串语法编写正则表达式时,您可能需要执行额外的转义 — 详情请参阅带引号的字符串语法 (Quoted string syntax)。
要编写复杂的正则表达式,Cloudflare 建议您使用原始字符串语法 (raw string syntax),它需要的转义较少。
Expression Editor 支持使用括号作为分组符号。使用括号显式地分组和嵌套表达式,进而创建高度针对性的表达式。
以下规则表达式将匹配来自非马来西亚的且试图访问 WordPress URI 路径的任何访客的请求。
((http.request.uri.path contains "/xmlrpc.php") or (http.request.uri.path
contains "/wp-login.php") or (http.request.uri.path contains "/wp-admin/"
and not http.request.uri.path contains "/wp-admin/admin-ajax.php" and not
http.request.uri.path contains "/wp-admin/theme-editor.php")) and
ip.src.country ne "MY"只有 Expression Editor 支持如上所示的嵌套表达式。如果在 Expression Editor 中创建具有嵌套表达式的规则,并尝试切换到 Expression Builder,对话框会警告您构建器不支持该表达式。系统将提示您 Discard changes(放弃更改) 并切换到 Expression Builder 或 Cancel(取消) 并继续在编辑器中工作。
Cloudflare 会在保存之前验证所有表达式,因此如果您的表达式有错误,您将在 Cloudflare 仪表板中收到类似如下的错误信息:
Filter parsing error (1:313): ((http.request.uri.path contains
"/xmlrpc.php") or (http.request.uri.path contains "/wp-login.php") or
(http.request.uri.path contains "/wp-admin/" and not
http.request.uri.path contains "/wp-admin/admin-ajax.php" and not
http.request.uri.path contains "/wp-admin/theme-editor.php")) and
ip.src.country ne "MY") ^ unrecognised input