Amazon CloudFront Functions を使用して受信リクエストの URI パスの書き換え、変更を試行したところ、URI パスの修正で問題が発生します。
解決策
CloudFront 関数が正しいキャッシュ動作に関連付けられていない
CloudFront 関数は、変更するリクエストにおける正しいキャッシュ動作とパスパターンに関連付けられていることを確認します。複数のキャッシュ動作が同じリクエストとマッチングする場合、CloudFront は優先順位が最も高い動作を適用します。
次の手順を実行します。
- CloudFront コンソールを開きます。
- ナビゲーションペインで [ディストリビューション] を選択し、目的のディストリビューションを選択します。
- [動作] タブに切り替え、各動作のパスパターンを確認します。
CloudFront 関数の実行後に URI パスが一致しない
CloudFront 関数ログに "URI path mismatch" エラーが表示されていないか確認します。このエラーが発生した場合、書き換えられた URI パスは、関数の実行後に想定される形式と一致していません。
CloudFront 関数コードをレビューし、URI パスを正しく変更できることを確認します。URI パスには、不適切な文字を含めることはできません。また、先頭には前向きスラッシュ (/) が必要です。
URI パスの例:
/analytics.js/v1/xT5Qstsd35FL5WgikA1ABwyCQUDDYPHx/analytics.min.js';
詳細については、「CloudFront とエッジ関数のメトリクスを表示する」を参照してください。
SSL 証明書がオリジンとリクエストされたドメインと一致しない場合
CloudFront 関数がホストヘッダー値を書き換えると、SSL 証明書のドメインと一致しなくなった場合、問題が発生します。CloudFront 関数は、SSL 証明書に含まれるドメインとは異なるドメインにリクエストを転送します。
この問題を解決するには、CloudFront 関数を修正し、ホストヘッダーをオリジンの SSL 証明書ドメインと一致するよう書き換える設定を行います。
たとえば、オリジンの SSL 証明書は example.com を指定しているものの、リクエストされたドメインが www.example.com である場合は、CloudFront 関数に次のコードを追加します。
request.headers['host'] = ['example.com'];
この修正を行うと、ホストヘッダーは、リクエストをオリジンに転送する前に、example.com に書き換えられます。
SPA デプロイにおける URI が誤っている
CloudFront で単一ページアプリケーション (SPA) をデプロイした場合は、静的アセットを除き、リクエストを書き換えて index.html ファイルを提供する要件があるかどうかを確認します。たとえば、リクエストは静的アセット (例: JavaScript や CSS ファイル) のチェックを行いません。
URI にファイル拡張子または末尾のスラッシュがあるかどうかを確認するには、CloudFront 関数で次のコードを使用します。
function handler(event) {
var request = event.request;
var uri = request.uri;
// Check whether the URI is missing a file name or a file extension.
if (uri.endsWith('/') || !uri.includes('.')) {
request.uri = '/index.html';
}
return request;
}
リクエストが SPA から行われた場合は、URI は /index.html に書き換えられます。リクエストが SPA 以外から行われた場合、URI は変更されず、静的アセットへのリクエストは、変更なしで許可されます。
URL を変更し、URI からスラッシュが欠落した
CloudFront 関数を使用して URL を短縮または変更する場合は、URL リクエストを受け付けるには、URI の先頭に前向きスラッシュを追加します。
URL を短縮する CloudFront 関数の例:
request.uri = '/' + newShortUrl;
return request;
関連情報
CloudFront Functions のビューワーリクエストイベントを新しい URL にリダイレクトする
CloudFront Functions のビューワーリクエストイベントにおいて、リクエスト URI を KeyValueStore 構成に基づいて書き換える