1

aws s3 に静的なウェブサイトがあります。ルート 53 とクラウド フロントをセットアップすると、すべてがスムーズに機能します。s3 バケットは、index.html をインデックス ドキュメントとして提供するように設定されています。

ここで、index-en.html という別のファイルを追加しました。これは、リクエストの国が私の母国ではなく他の国である場合に提供される必要があります。

このために、次のコードで lambda@edge 関数を追加しました。

'use strict';

/* This is an origin request function */
exports.handler = (event, context, callback) => {
    const request = event.Records[0].cf.request;
    const headers = request.headers;

    /*
     * Based on the value of the CloudFront-Viewer-Country header, generate an
     * HTTP status code 302 (Redirect) response, and return a country-specific
     * URL in the Location header.
     * NOTE: 1. You must configure your distribution to cache based on the
     *          CloudFront-Viewer-Country header. For more information, see
     *          http://docs.aws.amazon.com/console/cloudfront/cache-on-selected-headers
     *       2. CloudFront adds the CloudFront-Viewer-Country header after the viewer
     *          request event. To use this example, you must create a trigger for the
     *          origin request event.
     */

    let url = 'prochoice.com.tr';
    if (headers['cloudfront-viewer-country']) {
        const countryCode = headers['cloudfront-viewer-country'][0].value;
        if (countryCode === 'TR') {
            url = 'prochoice.com.tr';
        } else {
            url = 'prochoice.com.tr/index-en.html';
        }
    }

    const response = {
        status: '302',
        statusDescription: 'Found',
        headers: {
            location: [{
                key: 'Location',
                value: url,
            }],
        },
    };
    callback(null, response);
};

また、クラウド フロントの動作を編集して、Origin ヘッダーと Viewer-country ヘッダーをホワイトリストに登録し、cloudfront Viewer-Request イベントとラムダ関数 ARN の関係をセットアップしました。

しかし、「リダイレクト エラーが多すぎます」というメッセージが表示されます。

2 つの質問があります。

  1. 「リダイレクトエラーが多すぎます」を修正するには?
  2. 「TR」以外の視聴者の場合、デフォルトのランディング ページは index-en.html である必要があります。そこから、ナビゲーション メニューからさらに 2 つの英語ページにアクセスできます。そのため、ユーザーがページ ナビゲーションから特定のページをリクエストした場合は、それらのページにアクセスできる必要があります。ページがリクエストされていない場合は、デフォルトのランディング ページが提供される必要があります。

助けに感謝します。ありがとう。

4

1 に答える 1