オリジンサーバー上のリソースのパスが変更された場合、対応する CDN ノード上のパスも変更されます。ユーザーが元の URL をリクエストすると、CDN ノードは URL を書き換え、リクエストを宛先パスにリダイレクトします。このプロセスは、オリジンへのリクエストを削減し、クライアントのアクセスパフォーマンスを向上させます。
背景情報
HTTP 302 ステータスコード (302 Found) は、リソースが一時的に移動されたことを示します。URL 書き換えルールを設定すると、CDN ノードは HTTP Location ヘッダーに新しい URL を含めます。クライアントが 302 レスポンスを受信すると、新しい URL をリクエストします。
デフォルトでは、URL 書き換えルールが設定されると、CDN ノードは 302 ステータスコードを送信します。ステータスコード 303 および 307 もサポートされています。ステータスコードを変更するには、か、チケットを起票することでリクエストを送信できます。
|
コード |
意味 |
処理方法 |
典型的な適用シナリオ |
|
302 |
Found |
GET メソッドは変更されません。他のメソッドは GET メソッドに変更される可能性があります。 |
予期せぬ理由でページが一時的に利用できなくなっています。この場合、検索エンジンはリンクを更新しません。 |
|
303 |
See Other |
GET メソッドは変更されません。他のメソッドは GET メソッドに変更されます。メッセージ本文は失われます。 |
PUT または POST リクエストが完了した後のページリダイレクトに使用されます。これにより、ページが更新された場合に操作が再度トリガーされるのを防ぎます。 |
|
307 |
Temporary Redirect |
メソッドもメッセージ本文も変更されません。 |
予期せぬ理由でページが一時的に利用できなくなっています。この場合、検索エンジンはリンクを更新しません。このステータスコードは、サイトが GET 以外のメソッドのリンクや操作をサポートしている場合に 302 ステータスコードよりも優れています。 |
1 つのドメイン名には、最大 50 個の書き換えルールを設定できます。複数のルールが設定されている場合、ルールは CDN コンソールの URL 書き換えリストに表示されている上から順に実行されます。
[アクセス URL の書き換え]と[オリジンフェッチパスの書き換え]の違い
|
機能 |
影響を受けるオブジェクト |
クライアントエクスペリエンス |
適用シナリオ |
|
クライアントがアクセスする URL に影響します。また、CDN ノードがオリジンフェッチに使用する URL も変更します。 |
|
一般的に、古いドメイン名から新しいドメイン名への URL の移行やマッピングに使用されます。また、モバイルクライアントと PC クライアントに異なる URL を提供するためにも使用されます。 例:クライアントが |
|
|
CDN ノードがオリジンフェッチに使用する URL に影響します。クライアントがアクセスする URL は変更されません。 |
クライアントに表示される URL は実際のアクセス URL と同じです。変更はありません。 |
一般的に、オリジンサーバーの実際の URL 構造を隠してその情報を保護するために使用されます。また、CDN ノードが異なるオリジンサーバーのフォルダーからコンテンツを取得するための URL マッピングにも使用されます。 例:クライアントが |
[アクセス URL の書き換え]の図解
-
クライアントは CDN ノードにリクエストを送信します。リクエスト URL は
old.example.com/helloです。 -
CDN ノードがリクエストを受信した後、URL リライトルールを適用します。CDN ノードは、クライアントに送信される 302 応答の Location ヘッダーに新しい URL
new.example.com/helloを含めます。 -
クライアントが 302 応答を受信した後、新しい URL にリクエストを送信します。
-
CDN ノードはキャッシュをチェックします。キャッシュに書き換えられた URL のコンテンツが含まれている場合、ノードはコンテンツを直接クライアントに返します。含まれていない場合、CDN ノードは書き換えられた URL
new.example.com/helloを使用してオリジンサーバーにリクエストを送信します。 -
オリジンサーバーはリクエストを受信し、応答コンテンツを CDN ノードに返します。
-
CDN ノードは応答コンテンツをキャッシュし、クライアントに返します。
[オリジンフェッチパスの書き換え]の図解
-
クライアントは CDN ノードにリクエストを送信します。リクエスト URL は
cdn.example.com/files/hello.txtです。 -
CDN ノードがリクエストを受信した後、キャッシュをチェックします。キャッシュにリクエスト URL のコンテンツが含まれている場合、ノードはコンテンツを直接クライアントに返します。含まれていない場合、CDN ノードはオリジンフェッチ URL リライトルールを適用します。オリジンフェッチ URL を
origin.example.com/secret/files/hello.txtに書き換え、オリジンサーバーにリクエストを送信します。 -
オリジンサーバーがリクエストを受信した後、応答コンテンツを CDN ノードに返します。
-
CDN ノードは応答コンテンツをキャッシュし、クライアントに返します。
操作手順
Alibaba Cloud CDN コンソールにログインします。
左側のナビゲーションペインで [ドメイン名 ] をクリックします。
[ドメイン名] ページで、管理対象のドメイン名を見つけ、[アクション] 列の [管理] をクリックします。

ドメイン名の左側のナビゲーションウィンドウで、[キャッシュ設定] をクリックします。
-
アクセス URL の書き換え タブをクリックします。
-
追加 をクリックし、アクセス URL の書き換えパラメーターを設定します。
パラメーター
説明
[書き換えのパス]
パスは
/で始まる必要があります。プロトコルヘッダーやドメイン名を含めることはできません。PCRE 正規表現がサポートされており、例えば^/hello$のように使用できます。URL 内の
#の後のコンテンツは、クライアント側のフラグメント識別子です。ブラウザーはフラグメント識別子をサーバーに送信しません。このため、CDN の書き換えルールは#の後のパスと一致させることができません。#フラグメントを含む URL にリダイレクトを設定するには、#の前のパスと完全に一致する書き換えルールを、宛先アドレスごとに作成する必要があります。[変更後のパス]
-
実行ルールが 中断 に設定されている場合、パスは
/で始まる必要があります。プロトコルヘッダーまたはドメイン名を含めることはできません。 -
実行ルールが リダイレクト に設定されている場合、パスにはプロトコルヘッダーとドメイン名を含めることができます。PCRE 正規表現がサポートされています。例えば、
$1や$2を使用して、書き換え対象パスの括弧内の文字列をキャプチャできます。
[フラグ]
-
[リダイレクト] と 中断 はデフォルトでサポートされています。
-
リダイレクト: リクエスト URL がルールに一致する場合、リクエストは 302 ステータスコードで宛先 URL にリダイレクトされます。 ノードがクライアントに返す Location ヘッダーには、宛先 URL が含まれます。元の URL のパラメーターは変更されません。このルールが実行された後も、残りのルールとの照合が続行されます。
-
[中断]:リクエスト URL がルールに一致する場合、リクエストは宛先 URL に書き換えられます。元の URL のパラメーターは変更されません。このルールが実行された後、システムは残りのルールのマッチングを行いません。
-
-
empty、enhance-break、enhance_redirect ルールもサポートされています。これらのルールを使用するには、バックグラウンドで設定するためにチケットを送信する必要があります。
-
empty:複数のルールが設定されていて、リクエスト URL があるルールに一致した場合、現在のルールが実行された後、システムは後続のルールのマッチングを続行します。
-
enhance_break:break に似ていますが、パラメーターを含む URL 全体を書き換えます。
-
enhance_redirect:redirect に似ていますが、パラメーターを含む URL 全体を書き換えます。
-
説明実行ルールによって書き換え方法が異なります。また、書き換えられた URL が他のドメイン名やプロトコルを使用できるかどうかも異なります。
-
empty、ブレーク、enhance_break は、ユーザーのリクエスト URL を直接書き換えます。別のドメイン名やプロトコル (HTTP から HTTPS など) への書き換えはサポートしていません。
-
リダイレクトと enhance_redirect は、302 リダイレクトを使用して URL を書き換えます。他のドメイン名やプロトコルへの書き換えをサポートしています。
-
302 Location アドレスは、現在のアクセラレーションドメイン名だけでなく、別のドメイン名に設定できます。例えば、
example.comドメインからaliyundoc.comドメインへの URL 書き換えが可能です。 -
302 Location アドレスは他のプロトコルをサポートしています。例えば、URL を HTTP から HTTPS に書き換えることができます。
-
[ルール条件]
ルール条件は、ユーザーリクエスト内のさまざまなパラメーター情報を識別します。これにより、そのリクエストに対して設定が有効になるかどうかが決まります。
重要ルール条件を参照する場合、機能自体の設定順序ではなく、関連するルール条件の優先順位に基づいてマッチングされます。
-
使用しない:ルール条件を使用しません。
-
ルール条件を追加または編集するには、ルールエンジンで管理してください。
[Nginx Var]
このオプションはデフォルトでオフになっています。このオプションをオンにすると、宛先 URL で組み込みの Nginx 変数を使用できます。以下は設定例です。
-
書き換え対象パス:
^/test.jpg$ -
書き換え後のパス:
/test.${arg_type} -
Nginx 変数計算を有効にすると、
${nginx_var}の値が計算されます。${arg_type}は、元の URL のtypeパラメーターの値を表します。
説明このパラメーターを使用するには、バックグラウンドで設定するためにチケットを送信する必要があります。
-
-
OK をクリックします。
リライト機能を設定した後、リライトリストからルールを 変更 または 削除 できます。
設定例
例 1
クライアントが http://example.aliyundoc.com/hello をリクエストすると、リクエストパスは /hello です。CDN ノードは、302 レスポンスの Location ヘッダーに新しい URL http://example.aliyundoc.com/index.html を含めてレスポンスをクライアントに返します。その後、クライアントは http://example.aliyundoc.com/index.html にリクエストを送信します。
このルールでは、書き換え対象パスを ^/hello$ に、書き換え後のパスを /index.html に設定し、実行ルールを リダイレクトに設定します。
302 リダイレクト中に、Location ヘッダーにプロトコルとドメイン名が含まれていない場合、クライアントはデフォルトで元のリクエストのプロトコルとドメイン名を使用します。
例 2
クライアントが http://example.aliyundoc.com/hello をリクエストすると、リクエストパス /hello が正規表現 ^/hello$ と一致します。CDN ノードはクライアントに 302 レスポンスを返します。このレスポンスには、Location ヘッダーに宛先 URL https://test.aliyundoc.com/index.html が含まれています。クライアントはレスポンスを受信すると、https://test.aliyundoc.com/index.html にリクエストを送信します。
設定ルール:書き換え対象パスを ^/hello$ に設定し、書き換え後のパスを https://test.aliyundoc.com/index.html に設定し、実行ルールを リダイレクトに設定します。
例 3
クライアントが http://www.example.com/cdn/url/http://image.example.com/image/cat.jpg をリクエストすると、リクエストパスに /cdn/url/http:// が含まれているため、正規表現 ^/cdn/url/http://(.*) に一致します。 CDN ノードはクライアントに 302 レスポンスを返します。 レスポンスの Location ヘッダーには、宛先 URL http://image.example.com/image/cat.jpg が含まれています。 クライアントがレスポンスを受信すると、http://image.example.com/image/cat.jpg にリクエストを送信します。
設定ルールでは、書き換え後のパスを http://$1 に、実行ルールを リダイレクトに設定します。
例 4
クライアントが http://example.aliyundoc.com/stories/index.html#/voice/318 をリクエストすると、URL の #/voice/318 の部分はクライアント側のフラグメント識別子です。ブラウザはこの部分をサーバーに送信しません。CDN ノードが受信する実際のリクエストパスは /stories/index.html です。したがって、書き換えルールを設定する際は、# の前のパスに一致するように、[書き換え元パス] を ^/stories/index\.html$ に設定します。次に、[書き換え先パス] をターゲット URL に設定し、[実行ルール] を [リダイレクト] に設定します。
異なる # フラグメントを持つ複数のソース URL を、それぞれ異なる宛先 URL にリダイレクトする場合、ソースパスごとに個別の書き換えルールを設定する必要があります。これは、サーバーが # 記号に続く内容に基づいて URL を区別できないためです。