Я только начал свой путь обучения с AWS Lambda и CloudFront. Мне показалось довольно простым манипулировать запросом и ответом, но я заблокирован, чтобы выполнить простую задачу.
Учитывая приведенный ниже код, я хотел инициировать действия только в случае, когда у пользователя нет / it/ или / en / в request.uri
У меня нет проблем с разбором строки URI, но я не уверен, как добиться этой очень простой логики:
if(uri contains 'it' or 'en') {
proceed as normal and forward request to origin
} else {
return a 301 response with '/it' or '/en' based on user language
}
нижеприведенная функциянаписанный в node.js выполняет эту работу частично, он запускается в Viewer Request
в моем дистрибутиве CloudFront:
exports.handler = async (event, context, callback) => {
// const
const request = event.Records[0].cf.request;
const headers = request.headers;
// non IT url
let url = '/en/';
if (headers['cloudfront-viewer-country']) {
const countryCode = headers['cloudfront-viewer-country'][0].value;
if (countryCode === 'IT') {
url = '/it/';
}
}
const response = {
status: '301',
statusDescription: 'geolocation',
headers: {
location: [{
key: 'Location',
value: url,
}],
},
};
callback(null, response);
};