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

Edge Security Acceleration:URL リライト

最終更新日:Sep 02, 2026

Edge Security Acceleration (ESA) のエッジノードで URL リライトルールを設定することで、オリジンリクエストのパスとクエリ文字列を変更できます。ユーザー向けの URL やフロントエンドの設定を変更することなく、オリジンサーバーのパスを移行できます。

ユースケース

  • オリジンの移行:オリジンファイルのパスは調整されますが、ユーザーのアクセスパスは変更したくない場合。

  • API バージョンの適応:古い API バージョンのパスを新しいバージョンに書き換える場合。

  • パラメーターの標準化:異なるクライアントから渡されるパラメーターの形式を統一する場合。

  • クリーン URL:複雑なバックエンドパスを、分かりやすいユーザー向けのパスにマッピングする場合。

仕組み

説明

お客様が送信したキャッシュプリフェッチタスクを ESA が実行する際、URL リライトルールはプリフェッチ URL には適用されません。

URL リライトはオリジンへのリクエスト時にのみ適用され、ESA の内部処理パイプラインには影響しません。キャッシュキーは元の URL から生成されるため、キャッシュのマッチングには影響しません。書き換えられた URL は、オリジンへのリクエストにのみ使用されます。

実行フロー

  1. キャッシュの確認:エッジノードは元の URL でキャッシュを検索します。キャッシュミスが発生した場合、URL リライトルールによって URL がターゲットパスに変換されます。

  2. オリジンリクエスト:書き換えられた URL がオリジンサーバーに送信されます。レスポンスは、元の URL をキャッシュキーとしてキャッシュに保存されます。

  3. キャッシュされたコンテンツの返却:キャッシュされたコンテンツがクライアントに返されます。

実行順序

URL リライトは、キャッシュの確認とオリジン選択の後、オリジンリクエストヘッダーの変更前に実行されます。パスは、オリジンのターゲットが決定された後に調整され、ヘッダー処理には影響しません。

URL リライトルールの設定

  1. ESA コンソールで、サイト管理 を選択し、サイト 列で対象のサイトをクリックします。

  2. 左側メニューで、ルール > 変換ルール を選択します。

  3. URL の書き換え セクションで、ルールを追加 をクリックし、ルール名 を入力します。パス と クエリ文字列 を設定し、OK をクリックします。

    書き換え対象

    操作方法

    説明

    例

    [パス]

    [保持する]

    元のパスを変更しません。

    -

    [静的]

    固定パスに置き換えます (/ で始まる必要があります)。

    /new/path

    [動的]

    式 を使用してパスを動的に生成します。

    concat("/v2", http.request.uri.path)

    [クエリ文字列]

    [保持する]

    元のクエリ文字列を変更しません。

    -

    [静的]

    固定パラメーターに置き換えます (? は含みません)。

    version=new&type=api

    [動的]

    式 を使用してクエリ文字列を動的に生成します。

    concat("version=new&", http.request.uri.query)

設定例

例 1:オリジンパスの移行

  • ユースケース:オリジンが画像を /images/ ディレクトリから /static/img/ ディレクトリに移動する場合。

  • 一致条件:starts_with(http.request.uri.path, "/images/")

  • 書き換え設定:

    書き換え対象:パス

    操作方法:動的

    式:regex_replace(http.request.uri.path, "^/images/", "/static/img/")

  • 書き換え効果:

    ユーザーリクエスト:https://example.com/images/logo.png

    オリジンリクエスト:https://origin.com/static/img/logo.png

例 2:API バージョンの適応

  • ユースケース:オリジンへのリクエスト時に、リクエストを /api/v1/ から /api/v2/ に書き換え、バージョン識別子を追加する場合。

  • 一致条件:starts_with(http.request.uri.path, "/api/v1/")

  • 書き換え設定:

    書き換え対象:パス、クエリ文字列

    操作方法:動的

    パスの書き換え式:regex_replace(http.request.uri.path, "^/api/v1/", "/api/v2/")

    クエリ文字列の書き換え式:concat("api_version=v2&", http.request.uri.query)

  • 書き換え効果:

    ユーザーリクエスト:https://example.com/api/v1/users?limit=10

    オリジンリクエスト:https://origin.com/api/v2/users?api_version=v2&limit=10

例 3:パラメーターの標準化

  • ユースケース:異なるクライアントが異なるパラメーター名 (userid や uid など) を使用する場合、それらを標準の user_id に統一します。

  • 一致条件:http.request.uri.query contains "userid="

  • 書き換え設定:

    書き換え対象:クエリ文字列

    操作方法:動的

    式:regex_replace(http.request.uri.query, "userid=", "user_id=")

  • 書き換え効果:

    ユーザーリクエスト:https://example.com/profile?userid=123

    オリジンリクエスト:https://origin.com/profile?user_id=123

例 4:パスの正規化

ケース 1

  • ユースケース:入力エラーによって生じた URL 内の余分なスラッシュ (// など) を削除する場合。

  • 注意事項:regex_replace 関数は、ソース文字列内で最初に一致したものだけを置き換えます。

  • 一致条件:http.request.uri.path contains "//"

  • 書き換え設定:

    書き換え対象:パス

    操作方法:動的

    式:regex_replace(http.request.uri.path, "//+", "/")

  • 書き換え効果:

    ユーザーリクエスト:https://example.com/path//to/resource

    オリジンリクエスト:https://origin.com/path/to/resource

ケース 2

  • ユースケース:連続する複数のスラッシュを 1 つのスラッシュにまとめます。例:/path///download//image//user.jpg。

  • 解決策:複数の regex_replace 呼び出しをネストして、連続するスラッシュを段階的に置き換えます。

  • 一致条件:http.request.uri.path contains "//"

  • 書き換え設定:

    • 書き換え対象:パス

    • 操作方法:動的

    • 式:regex_replace(regex_replace(regex_replace(http.request.uri.path, "//+", "/"), "//+", "/"), "//+", "/")

  • 書き換え効果:

    • ユーザーリクエスト:https://example.com/path///download//image//user.jpg

    • オリジンリクエスト:https://origin.com/path/download/image/user.jpg

例 5:すべてのクエリパラメーターを削除

  • ユースケース:静的リソースからすべてのクエリパラメーターを取り除きます。たとえば、.css で終わる URI からクエリ文字列を削除します。

  • 一致条件:ends_with(http.request.uri.path, ".css")

  • 書き換え設定:

    書き換え対象:クエリ文字列

    操作方法:動的

    式:regex_replace(http.request.uri.query, ".*", "")

  • 書き換え効果:

    ユーザーリクエスト:https://example.com/style.css?version=1.2.3

    オリジンリクエスト:https://origin.com/style.css?

例 6:動的パスの簡略化

  • ユースケース:パスから冗長な連続する数字を削除します。たとえば、/example/ 以下のパスから、123 とそれに続く数字を削除します。

  • 一致条件:(http.request.uri.path matches "^/example/(.*)123[0-9]+(.*)$")

  • 書き換え設定:

    書き換え対象:パス

    操作方法:動的

    式:regex_replace(http.request.uri.path,"^/example/(.*)123[0-9]+(.*)$","/example/$1$2")

  • 書き換え効果:

    ユーザーリクエスト:https://example.com/example/tool12300341features

    オリジンリクエスト:https://origin.com/example/toolfeatures

例 7:パスパラメーターを抽出し、クエリ文字列に追加

  • ユースケース:動的なパスセグメントを抽出し、それをクエリパラメーターとして追加し、固定の文字列に置き換えます。

    元の URI:/api/v1/dynamic_value/download?version=1&size=2

    書き換え後の URI:/api/v1/fixed/download?version=1&size=2&token=dynamic_value

  • 一致条件:すべてのリクエスト

  • 書き換え設定:

    書き換え対象:パスとクエリ文字列

    操作方法:動的

    パスの書き換え式:regex_replace(http.request.uri.path, "^/api/v1/(.*)/download$", "/api/v1/fixed/download")

    クエリ文字列の書き換え式:concat(http.request.uri.query,"&token=",regex_replace(http.request.uri.path, "^/api/v1/(.*)/download$","$1"))

  • 書き換え効果:

    ユーザーリクエスト:https://example.com/api/v1/ABC123/download?version=1&size=2

    オリジンリクエスト:https://origin.com/api/v1/fixed/download?version=1&size=2&token=ABC123

例 8:特定のパラメーターを削除

  • ユースケース:特定のクエリパラメーターを削除します。たとえば、https://example.com/1.txt?key1=value1&key2=value2&key3=value3&key4=value4&key5=value5&key6=value6 から、key2、key3、key5、key6 を削除し、key1 と key4 のみを保持します。

  • 一致条件:すべてのリクエスト

  • 書き換え設定:

    書き換え対象:クエリ文字列

    操作方法:動的

    式:regex_replace(regex_replace(regex_replace(regex_replace(http.request.uri.query, "(&?key2=[^&]*)", ""), "(&?key3=[^&]*)", ""), "(&?key5=[^&]*)", ""), "(&?key6=[^&]*)", "")

    説明

    ネストされた各 regex_replace は、1 つのパラメーターを削除します。パターン (&?keyN=[^&]*) は、先行する & にもマッチするため、& 文字が残るのを防ぎます。

  • 書き換え効果:

    ユーザーリクエスト:https://example.com/1.txt?key1=value1&key2=value2&key3=value3&key4=value4&key5=value5&key6=value6

    オリジンリクエスト:https://origin.com/1.txt?key1=value1&key4=value4

例 9:特定のパラメーターを保持

  • ユースケース:特定のクエリパラメーターのみを保持します。たとえば、https://example.com/1.txt?key1=value1&key2=value2&key3=value3&key4=value4 から、key1 と key4 のみを保持します。

  • 一致条件:すべてのリクエスト

  • 書き換え設定:

    書き換え対象:クエリ文字列

    操作方法:動的

    式:concat("key1=", http.request.uri.args["key1"], "&key4=", http.request.uri.args["key4"])

    説明

    concat 関数は、指定されたパラメーターのみでクエリ文字列を再構築します。各パラメーターの値を抽出するには、http.request.uri.args["keyN"] を使用します。concat 関数で指定されていないパラメーターは除外されます。

  • 書き換え効果:

    ユーザーリクエスト:https://example.com/1.txt?key1=value1&key2=value2&key3=value3&key4=value4

    オリジンリクエスト:https://origin.com/1.txt?key1=value1&key4=value4

例 10:拡張子によるリクエストの除外と書き換え

  • ユースケース:拡張子が html のリクエストを除外し、それ以外のすべてのリクエストを指定されたパスに書き換えます。

  • 一致条件:拡張子が html と等しくない。式:http.request.uri.path.extension ne html

  • 書き換え設定:

    書き換え対象:パス

    操作方法:静的

    書き換え後のパス:/static/index.html

説明

http.request.uri.path.extension 変数は、URI パス内の最も右側にあるファイルセグメントの拡張子を、先頭のドットを含まずに返します。たとえば、/cat.jpg の拡張子は jpg、/cat の拡張子は空文字列、/cat.html の拡張子は html です。

例 11:拡張子に基づくリクエストのルーティング

  • ユースケース:拡張子を持つリクエストを static/url にルーティングし、拡張子を持たないリクエストを static/index.html にルーティングします。

  • 一致条件と書き換え設定:

    • 拡張子を持つリクエストには、一致条件 http.request.uri.path.extension ne "" を使用します。

      書き換え対象:パス

      操作方法:静的

      書き換え後のパス:/static/url

    • 拡張子を持たないリクエストには、一致条件 http.request.uri.path.extension eq "" を使用します。

      書き換え対象:パス

      操作方法:静的

      書き換え後のパス:/static/index.html