ダッシュボードでの編集
Cloudflareダッシュボードでは、式を編集するための2つのオプションがあります。
- Expression Builder: ドロップダウンリストを使用して式を作成でき、式を定義するための視覚的アプローチを強調します。
- Expression Editor: 値を変換および検証するための記号や関数のグループ化などの高度な機能をサポートするテキスト専用インターフェースです。
一般的に、Expression BuilderとExpression Editorの間を行き来することができます。ただし、Expression Builderはネストされた式や生文字列構文をサポートしていません。
Expression Builderを使用すると、ドロップダウンリストを使用してルール式を視覚的に作成し、フィールド値を入力して1つまたは複数のサブ式を定義できます。

Expression Previewは、テキストで式を表示します:
(ip.geoip.country ne "GB")Expression Builderは、文字列リテラル内のバックスラッシュ(\)およびダブルクォート(")の特殊文字を自動的にエスケープします。
Expression Editorは、ルール式を定義するためのテキスト専用インターフェースで、Cloudflareのルール言語の全仕様をサポートし、括弧をグループ化記号として使用します。

Expression Editorにアクセスするには、Expression Previewの隣にあるEdit expressionを選択します:

Expression EditorからExpression Builderに戻るには、Use expression builderを選択します。
引用文字列構文を使用する式では、文字列リテラル内のすべてのバックスラッシュ(\)およびダブルクォート(")文字はエスケープする必要があります。視覚的なExpression Builderは、これらの特殊文字を自動的にエスケープし、バックスラッシュを前置することで\と"がそれぞれ\\と\"になります。
Expression Builderを使用して構築された式は現在、引用文字列構文を使用しています。この構文に従って正規表現を入力する場合、追加のエスケープが必要になることがあります — 詳細については、Ruleset Engineドキュメントの引用文字列構文を参照してください。
複雑な正規表現を指定するには、CloudflareはExpression Editorを使用し、生文字列構文を使用して式を入力することを推奨します。これにより、エスケープが少なくて済みます。
Expression Editorは、括弧をグループ化記号としてサポートしています。括弧を使用して式を明示的にグループ化およびネストし、ターゲットを絞った式を作成します。
次のルール式は、マレーシア以外の訪問者からのリクエストをマッチさせ、WordPressのURIパスにアクセスしようとするものです。
((http.request.uri.path contains "/xmlrpc.php") or (http.request.uri.pathcontains "/wp-login.php") or (http.request.uri.path contains "/wp-admin/"and not http.request.uri.path contains "/wp-admin/admin-ajax.php" and nothttp.request.uri.path contains "/wp-admin/theme-editor.php")) andip.geoip.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 nothttp.request.uri.path contains "/wp-admin/admin-ajax.php" and nothttp.request.uri.path contains "/wp-admin/theme-editor.php")) andip.geoip.country ne "MY") ^ unrecognised input