У меня есть несколько старых URL-адресов, которые раньше использовали заглавные буквы для имен людей и тому подобное, но теперь я обновил свой сайт, добавив только строчные символы в URL-адресах каждой страницы. Итак, я хотел бы перенаправить людей, если они случайно нажали на старую ссылку или набрали заглавную букву случайно.
Я также проверяю удаление завершающей косой черты. Вот код, который я сейчас использую во внешнем интерфейсе. Я надеялся перейти на использование Lambda @ Edge (мой веб-сайт находится на S3 и распространяется через CloudFront) для этой проверки и перенаправления.
Вот функция JS, которую я использую во внешнем интерфейсе:
var newUrl = window.location.href.toLowerCase().replace(/\/$/, '')
loadIfChanged(newUrl)
function loadIfChanged (newUrl) {
if (newUrl != location.href) {
fetch(newUrl, {method: 'HEAD'}).then(function (response) {
if (response.status === 200) return window.location = newUrl
}).catch(function (error) {
return console.log(error)
})
}
}
Как я могу написать это в функции Lambda @ Edge?
Может быть, примерно так:
exports.handler = async function (event, context) {
// Lowercase the URL and trim off a trailing slash if there is one
var path = event.Records[0].cf.request.uri.toLowerCase().replace(/\/$/, '')
// How to do a fetch here? var ok = fetch()
if (ok) {
const response = {
status: '301',
statusDescription: 'Moved Permanently',
headers: {
location: [{
key: 'Location',
value: `https://example.com/${path}`,
}],
},
}
return response
} else {
return event.Records[0].cf.request
}
}
Могут ли функции Lambda @ Edge выполнять ввод-вывод?
И, что немаловажно, может ли эта функция Lambda @ Edge работать только на 404?