Как использовать Lambda @ Edge для определения страны пользователя и перенаправления в локализованную подпапку, например / pt? - PullRequest
0 голосов
/ 22 октября 2018

Я использую следующий код Lambda @ Edge, но не знаю, как это сделать.

Следующий код заставляет корневой индекс подкаталога работать в Cloudfront.

Cloudfront предложение страны происхождения в запросе?

'use strict';

exports.handler = (event, context, callback) => {

    // Extract the request from the CloudFront event that is sent to Lambda@Edge 
    var request = event.Records[0].cf.request;

    // Extract the URI and params from the request
    var olduri = request.uri;

    // Match any uri that ends with some combination of 
    // [0-9][a-z][A-Z]_- and append a slash
    var endslashuri = olduri.replace(/(\/[\w\-]+)$/, '$1/');

    //console.log("Old URI: " + olduri);
    //console.log("Params: " + params);
    //console.log("Mid URI: " + miduri);

    if(endslashuri != olduri) {
        // If we changed the uri, 301 to the version with a slash, appending querystring
        var params = '';
        if(('querystring' in request) && (request.querystring.length>0)) {
            params = '?'+request.querystring;
        }
        var newuri = endslashuri + params;

        //console.log("No trailing slash");
        //console.log("New URI: " + newuri);

        const response = {
            status: '301',
            statusDescription: 'Permanently moved',
            headers: {
                location: [{
                    key: 'Location',
                    value: newuri
                }]
            }
        };
        return callback(null, response);
    } else {
        // Match any uri with a trailing slash and add index.html
        newuri = olduri.replace(/\/$/, '\/index.html');

        //console.log("File or trailing slash");
        //console.log("New URI: " + newuri);

        // Replace the received URI with the URI that includes the index page
        request.uri = newuri;

        // Return to CloudFront
        return callback(null, request);
    }
};

1 Ответ

0 голосов
/ 23 октября 2018

В настройках Cache Behavior добавьте белый заголовок CloudFront-Viewer-Country для пересылки к источнику.Источник не нуждается в этом, но как только вы настроите его, у вас будет доступ к стране просмотра в триггере Lambda @ Edge Origin Request:

const cc = (request.headers['cloudfront-viewer-country'] || [ { value: 'XX' } ])[0].value;

Замените 'XX' на любое значение, которое вы хотитеприсвойте константу cc, если CloudFront не может определить код страны - например, по умолчанию.

Вы не можете получить доступ к стране из триггера запроса зрителя, но запрос источника в любом случае является лучшим выбором -- ответы (перенаправления) от этого триггера могут кэшироваться, что означает, что триггер срабатывает реже.CloudFront автоматически кеширует различную копию страницы для каждого кода страны и предоставляет ее только зрителям в одной и той же стране.

...