Я начал изучать NodeJS + Lambda@Edge несколько дней go, и одна из вещей, которые я пытался сделать, - это перенаправление / перезапись HTTP.
Моя текущая проблема - это когда я попробуйте использовать регулярные выражения на destination
. Например, я хочу перенаправить https://example.com/pt-BR/blog-posts/....
на https://example.com/pt/blog/....
, просто переписав начало pathname
.
Возможно ли сделать это перенаправление? Я знаю, что мог бы сделать это с помощью NGINX, но мне было интересно, смогу ли я сделать то же самое с помощью Lambda@Edge и более «dynamici c», например, получить эти URL-адреса через DynamoDB.
const redirects = require('./redirects.json').map(
({ source, destination }) => ({
source: new RegExp(source),
destination
})
);
exports.handler = async event => {
const request = event.Records[0].cf.request;
for (const { source, destination } of redirects) {
if (source.test(request.uri)) {
return {
status: '301',
statusDescription: 'Moved Permanently',
headers: {
location: [{ value: destination }]
}
};
}
}
return request;
};
Это redirects.json
. Первые два примера работают отлично, только последний - перенаправление на https://example.com/pt/blog/$1
вместо https://example.com/pt/blog/my-post-test001
.
[
{
"source": "^/pt/pt",
"destination": "/pt/"
},
{
"source": "^/en/en",
"destination": "/en/"
},
{
"source": "^/pt-BR/blog-posts/(.*)",
"destination": "/pt/blog/$1"
}
]
Это примеры / документы, которые я проверил: https://nodejs.org/docs/latest/api/url.html#url_url https://aws.amazon.com/blogs/networking-and-content-delivery/leveraging-external-data-in-lambdaedge/ https://www.npmjs.com/package/express-urlrewrite