すべてのプロダクト
Search
ドキュメントセンター

Edge Security Acceleration:関数

最終更新日:Jul 24, 2026

ESA ルール言語は、HTTP リクエストから抽出された値を操作および検証する変換関数を提供します。

サポートされている変換関数

concat

文字列を連結します。

  • 形式concat(String | Integer | Bytes | Array elements): String

  • ロジック: コンマで区切られた値のリストを 1 つの文字列に連結します。

    • concat("String1", " ", "String", 2)"String1 String2" を返します。

    • concat("/archive", http.request.uri.path) は、パスセグメント "/archive" を URI パスの先頭に追加します。

    • concat("userid=123&", http.request.uri.query) は、キーと値のペア "userid=123" を URI クエリ文字列の先頭に追加します。

    • concat("https://www.example.com", http.request.uri.path) は、新しいホスト名と元のリクエストパスを組み合わせて、新しい URL を生成します。

ends_with

文字列が指定された部分文字列で終わるかどうかを確認します。

  • 形式ends_with(source String, substring String): Boolean

  • ロジック

    • source Stringsubstring String で終わる場合は true を返し、それ以外の場合は false を返します。

    • source Stringフィールドである必要があります。リテラル文字列は使用できません。たとえば、ends_with("foo.html", ".html") と記述しないでください。

  • http.request.uri.path"/welcome.html" の場合、ends_with(http.request.uri.path, ".html")true を返します。

exists

リクエストに指定された情報が存在するかどうかを確認します。

  • 形式exists(String): Boolean

  • ロジック: ヘッダー、Referer、User-Agent、Cookie などの一部のリクエストフィールドはオプションです。この関数は、指定されたオプション情報がクライアントリクエストに存在するかどうかを確認します。情報が存在する場合は true を、存在しない場合は false を返します。

  • : リクエストに example という名前のヘッダーが含まれていない場合、exists(http.request.headers["example"])false を返します。

len

文字列の長さを返します。

  • 形式len(String): Integer

  • ロジック: フィールドの文字列値の文字数を返します。

    • http.host"example.com" の場合、len(http.host)11 を返します。

    • len(http.host) eq 11true を返します。

    • len(http.host) gt 11false を返します。

    • len(http.host) lt 11false を返します。

lower

文字列を小文字に変換します。

  • 形式lower(String): String

  • ロジックフィールドの文字列値を小文字に変換します。大文字の ASCII バイトのみが変換され、他のすべてのバイトは変更されません。

  • http.host"WWW.example.com" の場合、lower(http.host) == "www.example.com"true を返します。

percent

指定されたフィールド値とパーセンテージのしきい値に基づいてリクエストをフィルター処理します。

  • 形式percent(String | IP address, Integer): Boolean

  • ロジック: クライアントリクエスト内の指定されたフィールドの値に対して MD5 計算を実行し、モジュロ演算を適用して結果を 1 から 100 までの整数にマッピングします。マッピングされた値 (A) が指定された整数 (B) 以下の場合、この関数は true を返します。それ以外の場合は false を返します。

    • フィールド値が空の場合 (たとえば、リクエストに指定されたヘッダーが含まれていない場合)、ルールは有効にならず、関数は false を返します。

    • 2 番目のパラメーターは 1 から 100 までの整数である必要があります。

  • サポートされているフィールド

    • ヘッダー: http.request.headers["example"]

    • クライアント IP アドレス: ip.src

    • Cookie 値: http.request.cookies["example"]

    • URI クエリパラメーター: http.request.uri.args["example"]

    • リクエストタイムスタンプ: http.request.timestamp.sec

    • percent(http.request.headers["example"], 80)

    • percent(ip.src, 80)

    • percent(http.request.cookies["example"], 80)

    • percent(http.request.uri.args["example"], 80)

    • percent(http.request.timestamp.sec, 80)

regex_replace

正規表現パターンに一致する部分文字列を置換します。

  • 形式regex_replace(source String,regular_expression String,replacement String):String

  • ロジック

    • 正規表現に一致する最初の部分文字列を置換文字列で置き換えます。

    • デフォルトでは、大文字と小文字を区別してマッチングが行われます。

    • ソース文字列に複数のマッチが存在する場合でも、最初にマッチした文字列のみが置換されます。

    • 置換文字列内の $ 文字は、別の $ 文字を前に付けることでエスケープできます。

    • 置換文字列には、${<NUMBER>} という形式で正規表現のキャプチャグループへの参照を含めることができます。ここで、<NUMBER> はキャプチャグループの番号です。 ${1}${2} など、最大 8 つの参照がサポートされています。

    • 静的な文字のマッチングと置換:

      • 文字列のマッチング成功: regex_replace("/animal/cat", "/cat$", "/dog") == "/animal/dog"

      • マッチするものが見つからない場合、ソース文字列は変更されません:

        • 異なる文字列: regex_replace("/x", "^/y$", "/z") == "/x"

        • 大文字と小文字を区別する文字列: regex_replace("/cat", "^/CAT$", "/dog") == "/cat"

      • 複数のマッチが存在する場合、最初にマッチした文字列のみが置換されます: regex_replace("/a/a", "/a", "/b") == "/b/a"

      • 置換文字列内の $ 文字のエスケープ: regex_replace("/b", "^/b$", "/b$$") == "/b$"

      • 置換文字列でのキャプチャグループの使用: regex_replace("/foo/a/path", "^/foo/([^/]*)/(.*)$", "/bar/${2}/${1}") == "/bar/path/a"

    • 動的フィールドのマッチングと置換:

      • ソース文字列は、動的フィールドを使用してクライアントリクエストからパス情報を取得します。この例では、パス内の /cat//dog/ に置換します: regex_replace(http.request.uri.path, "/cat/(.*)$", "/dog/${1}")

      • 複雑な置換の例: 元のリクエストパスに 2 つの + 文字が含まれている場合に、それらを文字列 %2B に置換します: regex_replace(http.request.uri.path, "^([^+]*)\\+([^+]*)\\+(.*)$", "${1}%2B${2}%2B${3}")

starts_with

文字列が指定された部分文字列で始まるかどうかを確認します。

  • 形式starts_with(source String, substring String): Boolean

  • ロジック

    • source Stringsubstring String で始まる場合は true を返し、それ以外の場合は false を返します。

    • source Stringフィールドである必要があります。リテラル文字列は使用できません。たとえば、starts_with("foo.html", ".html") と記述しないでください。

  • http.request.uri.path"/welcome.html" の場合、starts_with(http.request.uri.path, "/welcome")true を返します。

to_string

値をその文字列表現に変換します。

  • 形式to_string(Integer | Boolean | IP address): String

  • ロジック: IntegerBoolean、または IP アドレスの値の文字列形式を返します。

    • ip.src.asnum の結果が 15169 の場合、to_string(ip.src.asnum)"15169" を返します。

    • ssl の結果が true の場合、to_string(ssl)"true" を返します。

    • ip.src の結果が 192.168.0.1 の場合、to_string(ip.src)"192.168.0.1" を返します。

upper

文字列を大文字に変換します。

  • 形式upper(String): String

  • ロジックフィールドの文字列値を大文字に変換します。小文字の ASCII バイトのみが変換され、他のすべてのバイトは変更されません。

  • http.host"www.example.com" の場合、upper(http.host)"WWW.EXAMPLE.COM" を返します。

wildcard_replace

ワイルドカードパターンに一致する部分文字列を置換します。

  • 形式wildcard_replace(source Bytes, wildcard_pattern Bytes, replacement Bytes, flags Bytes optional): String

  • ロジック

    • ソース文字列を 0 個以上の * ワイルドカードを含むパターンと照合し、一致した部分を置換文字列で置き換え、結果を返します。置換文字列には、${1}${2} など、ワイルドカードのキャプチャグループへの参照を含めることができます。最大 8 つの置換参照がサポートされています。

    • マッチするものがない場合、この関数は元のソース文字列を返します。

    • source パラメーターはフィールドである必要があり、リテラル文字列であってはなりません。source の値全体が wildcard_pattern パラメーターと一致する必要があり、部分一致はサポートされていません。

    • wildcard_pattern パラメーターにリテラル文字 * を入力するには、\* でエスケープする必要があります。また、\ 文字も \\ でエスケープする必要があります。** のように、エスケープされていない 2 つの * 文字を連続して使用することは無効なため、使用できません。文字のエスケープを実行するには、wildcard_pattern パラメーターに raw 文字列構文を使用します。

    • replacement パラメーターにリテラル文字 $ を入力するには、$$ でエスケープする必要があります。

    • 大文字と小文字を区別するワイルドカードマッチを実行するには、flags パラメーターを s に設定します。

    • この関数はレイジーマッチを使用します。各 * は可能な限り短い文字列にマッチします。

    • 完全な URI が https://apps.example.com/calendar/admin?expand=true の場合、式 wildcard_replace(http.request.full_uri, "https://*.example.com/*/*", "https://example.com/${1}/${2}/${3}")https://example.com/apps/calendar/admin?expand=true を返します。

    • 完全な URI が https://example.com/applications/app1 の場合、パターンは完全な URI と一致する必要があるため、式 wildcard_replace(http.request.full_uri, "/applications/*", "/apps/${1}")https://example.com/applications/app1 を変更せずに返します。パスのみのマッチングには http.request.uri.path を使用してください。

    • URI パスが /calendar の場合、式 wildcard_replace(http.request.uri.path, "/*", "/apps/${1}")/apps/calendar を返します。

    • URI パスが /Apps/calendar の場合、式 wildcard_replace(http.request.uri.path, "/apps/*", "/${1}")/calendar を返します。デフォルトでは、大文字と小文字は区別されません。

    • URI パスが /Apps/calendar の場合、式 wildcard_replace(http.request.uri.path, "/apps/*", "/${1}", "s")/Apps/calendar を返します。flags パラメーターが s に設定され、大文字と小文字を区別するマッチングが有効になっています。パターンが元の URI パスと一致しないため、結果は変更されません。

    • URI パスが /apps/calendar/login の場合、式 wildcard_replace(http.request.uri.path, "/apps/*/login", "/${1}/login")/calendar/login を返します。