Alibaba Cloud CDN では、オリジンパスの書き換えが可能です。URL 書き換え機能は POP (Point of Presence) 上で動作し、Alibaba Cloud CDN の内部サービスやキャッシュキーには影響しません。
仕組み
POP は URL 書き換えルールに基づき、オリジンサーバー上のリクエストされたリソースの URL とオリジンパスを照合します。その後、特定のパラメーターを持つリクエストがオリジンサーバーにリダイレクトされます。
書き換えルールで、Flag パラメーターを None または Break に設定した場合、URL 内のリソースパスのみが書き換えられます。
Flag パラメーターを enhance break に設定した場合、リソースパスとクエリ文字列が書き換えられます。
注意事項
各ドメイン名に対して、最大 50 個の back-to-origin Path の書き換え ルールを設定できます。
システムは、[オリジンパスの書き換え] タブにリストされている書き換えルールを上から順に実行します。この順序を変更すると、書き換え結果が変わる可能性があります。
back-to-origin Path の書き換え は、ドメイン名>パフォーマンスの最適化にある パラメーターを無視 機能の設定と競合する可能性があります。両方の機能が互いに競合しないようにしてください。
アクセス URL の書き換えとオリジンパスの書き換えの違い
機能 | 影響範囲 | クライアントエクスペリエンス | 利用シーン |
クライアントがアクセスする URL に影響します。また、POP がオリジンフェッチに使用する URL も変更します。 |
| 一般的に、古いドメイン名から新しいドメイン名への URL の移行やマッピング、またはモバイルクライアントと PC クライアントに異なる URL を提供するために使用されます。 例:クライアントが | |
POP がオリジンフェッチに使用する URL に影響します。クライアントがアクセスする URL は変更されません。 | クライアントに表示される URL はアクセスした URL と同じで、変更されません。 | 一般的に、オリジンサーバーの実際の URL 構造を隠してオリジンサーバー情報を保護するため、または URL マッピングを使用して CDN の POP が異なるオリジンディレクトリからコンテンツをフェッチできるようにするために使用されます。 例:クライアントが |
アクセス URL の書き換え
クライアントが POP にリクエストを送信します。リクエスト URL は
old.example.com/helloです。POP はリクエストを受信後、アクセス URL 書き換えルールに基づいてリクエスト URL を
new.example.com/helloに書き換えます。その後、POP は新しい URL を 302 応答の HTTP Location ヘッダーに含めます。クライアントは 302 応答を受信後、新しい URL に新しいリクエストを送信します。
POP はキャッシュを確認します。書き換えられた URL のコンテンツがキャッシュされている場合、POP はそのコンテンツをクライアントに返します。キャッシュされていない場合、POP はオリジンサーバーにリクエストを送信します。リクエスト URL は書き換えられた URL、
new.example.com/helloです。オリジンサーバーはリクエストを受信し、応答を POP に返します。
POP は応答をキャッシュし、クライアントに返します。
オリジンパスの書き換え
クライアントが POP にリクエストを送信します。リクエスト URL は
cdn.example.com/files/hello.txtです。POP はリクエストを受信後、キャッシュを確認します。リクエスト URL のコンテンツがキャッシュされている場合、POP はそのコンテンツをクライアントに返します。キャッシュされていない場合、POP はオリジンパス書き換えルールに基づいてオリジンパスを
origin.example.com/secret/files/hello.txtに書き換え、オリジンサーバーにリクエストを送信します。オリジンサーバーはリクエストを受信し、応答を POP に返します。
POP は応答をキャッシュし、クライアントに返します。
オリジンパス書き換えルールの作成
CDN コンソールにログインします。
左側のナビゲーションウィンドウで、ドメイン名 をクリックします。
ドメイン名 ページで、対象のドメイン名を見つけ、操作 列の 管理 をクリックします。
ドメイン名の左側のナビゲーションツリーで、Back-to-Origin 設定 をクリックします。
back-to-origin Path の書き換え タブをクリックします。
追加 をクリックします。
書き換えのパス、変更後のパス、および フラグ パラメーターを設定します。次の表にパラメーターを説明します。

パラメーター
例
説明
書き換えのパス
^/hello$
スラッシュ (/) で始まる URL を入力します。URL には http:// やドメイン名を含めることはできません。PCRE (Perl 互換正規表現) を使用する必要があります。
変更後のパス
/hello/test
スラッシュ (/) で始まる URL を入力します。URL には http:// やドメイン名を含めることはできません。PCRE がサポートされています。
フラグ
None
複数の URL 書き換えルールを設定した場合、Alibaba Cloud CDN はリクエストを上から順にルールと照合します。
break
複数の URL 書き換えルールを設定し、現在のルールが一致した場合、他のルールはスキップされます。
このオプションは、URL 内のリソースパスのみを書き換えます。URL パラメーターは変更されません。パラメーター書き換え機能を使用して URL パラメーターを書き換えることができます。back-to-origin Path の書き換え
enhance break
複数の URL 書き換えルールを設定し、現在のルールが一致した場合、他のルールはスキップされます。
break と比較して、enhance break は URL パラメーターも書き換えます。ただし、パラメーターの書き換え設定は オリジンフェッチパラメーターの書き換え の設定と競合する可能性があります。両方の機能を有効にしたい場合は、設定が互いに競合しないようにしてください。
OK をクリックしてルールを適用します。
新しい書き換えルールが back-to-origin Path の書き換え タブに表示されます。書き換えルールの [操作] 列にある 変更 または 削除 をクリックして、書き換えルールを変更または削除できます。
設定例
例 1:フラグが None に設定されたルールを適用する
書き換え元パス
^/hello$
書き換え先パス
/index.html
フラグ
None
期待される結果
元のリクエスト:
http://example.com/hello最終的なリクエスト:
http://example.com/index.htmlシステムは、back-to-origin Path の書き換え タブにリストされている他の URL 書き換えルールとの照合を続行します。
例 2:フラグが Break に設定されたルールを適用する
書き換え対象のパス
^/hello.jpg$
書き換え先パス
/image/hello.jpg
フラグ
break
期待される結果
元のリクエスト:
http://example.com/hello.jpg最終的なリクエスト:
http://example.com/image/hello.jpgシステムは、back-to-origin Path の書き換え タブにリストされている他の URL 書き換えルールとの照合を停止します。
例 3:フラグが enhance break に設定されたルールを適用する
書き換えられるパス
^/hello.jpg?code=123$
書き換え先パス
/image/hello.jpg?code=321
フラグ
enhance break
期待される結果
元のリクエスト:
http://example.com/hello.jpg?code=123最終的なリクエスト:
http://example.com/image/hello.jpg?code=321システムは、back-to-origin Path の書き換え タブにリストされている他の URL 書き換えルールとの照合を停止します。
例 4:ファイル名が変数の場合にルートディレクトリに URL プレフィックスを追加する
ルートディレクトリ内のすべてのファイルの URL に /image パスを追加します。例えば、URL 内の /xxx を /image/xxx に書き換えます。この例では、xxx は hello.jpg や hello.html などのファイル名です。
書き換え対象パス
^(.*)$
説明^は文字列の先頭からマッチングします。(.*)はグループで、.は改行を除く任意の文字にマッチし、*は直前の文字またはグループが 0 回以上繰り返されることを意味します。書き換え先パスで $1 を使用して、グループの変数コンテンツを参照できます。$は文字列の末尾にマッチします。^(.*)$は、文字列の先頭から末尾までをマッチングし、改行を除く任意の文字を含むことができ、マッチしたコンテンツをグループにキャプチャします。例えば、文字列"hello world"に対して、^(.*)$は文字列全体にマッチし、"hello world"を最初のグループにキャプチャします。書き換え先パス
/image$1
説明/imageは文字列"/image"にマッチします。$1は最初のグループのコンテンツを参照し、$2は 2 番目のグループのコンテンツを参照します。/image$1は文字列"/image"の後に最初のグループのコンテンツが続くものにマッチします。例えば、最初のグループのコンテンツが"abc"の場合、/image$1は文字列"/imageabc"にマッチします。注意:$1はリテラルの"$1"ではなく、グループのコンテンツを参照します。リテラルの"$1"にマッチさせたい場合は、エスケープ文字列"\$1"を使用します。フラグ
break
期待される結果
元のリクエスト:
http://example.com/hello.jpg最終的なリクエスト:
http://example.com/image/hello.jpg元のリクエスト:
http://example.com/hello.html最終的なリクエスト:
http://example.com/image/hello.html
システムは、オリジンパスの書き換え タブにリストされている他の URL 書き換えルールとの照合を停止します。
例 5:ファイル名が変数の場合に特定のディレクトリに URL プレフィックスを追加する
/live ディレクトリ内のすべてのファイルの URL に /image パスを追加します。例えば、URL 内の /live/xxx を /image/live/xxx に書き換えます。この例では、xxx は hello.jpg や hello.html などのファイル名です。
書き換え元パス
^/live/(.*)$
書き換え先パス
/image/live/$1
フラグ
break
期待される結果
元のリクエスト:
http://example.com/live/hello.jpg最終的なリクエスト:
http://example.com/image/live/hello.jpg元のリクエスト:
http://example.com/live/hello.html最終的なリクエスト:
http://example.com/image/live/hello.html
システムは、オリジンパスの書き換え タブにリストされている他の URL 書き換えルールとの照合を停止します。
例 6:複数のルールが設定されている場合に、フラグが None のルールのみを適用する
次の図に示すように、2 つの URL 書き換えルールを作成します。

期待される結果:
元のリクエスト:
http://example.com/image_01.png最終的なリクエスト:
http://example.com/image/image_02.png説明リクエストは最初のルールに一致し、オリジンパスは
http://example.com/image_02.pngに書き換えられます。その後、リクエストは 2 番目のルールに一致し、オリジンパスはhttp://example.com/image/image_02.pngに書き換えられます。
例 7:複数のルールが設定されている場合に、フラグが Break のルールを適用する
次の図に示すように、2 つの URL 書き換えルールを作成します。

期待される結果:
元のリクエスト:
http://example.com/image_01.png最終的なリクエスト:
http://example.com/image_02.png説明リクエストは最初のルールに一致し、リクエスト URL は
http://example.com/image_02.pngに書き換えられます。他のルールはスキップされます。