Lambda @ edge redirect попадает в цикл перенаправления - PullRequest
0 голосов
/ 19 ноября 2018

У меня есть статический сайт на aws s3. Есть настройка маршрута 53 и облачного фронта, и все работает гладко. s3 Bucket настроен для использования 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);
};

Я также отредактировал поведение фронта облака для включения в белый список заголовков стран происхождения и страны просмотра и настройки события просмотра запроса облачного фронта и лямбда-функции Функция ARN-отношение.

Однако я получаю «слишком много ошибок перенаправления».

У меня есть 2 вопроса:

  1. Как исправить ошибку "слишком много перенаправлений"?
  2. Для зрителей за пределами «TR» целевой страницей по умолчанию должен быть index-en.html, из которого через меню навигации доступны еще 2 страницы на английском языке. Поэтому, когда пользователи запрашивают определенную страницу из навигации по страницам, они должны иметь доступ к этим страницам, когда ни одна страница не запрашивается, должна быть предоставлена ​​целевая страница по умолчанию.

Ценю помощь. Благодарю.

1 Ответ

0 голосов
/ 19 ноября 2018

Вы создаете цикл перенаправления, потому что отправляете зрителя обратно на тот же сайт, на ту же страницу, независимо от результатов теста.

if (countryCode === 'TR') {
    return callback(null, request);
} else {
...

callback(null,request) говорит CloudFront продолжить обработку запроса, а не генерировать ответ. Использование return до обратного вызова приводит к тому, что остальная часть кода триггера не запускается.

...