У меня есть сайт, работающий на «бессерверной» функции AWS Lambda. Route53 направляет запросы к шлюзу API, который подключается к функции Lambda.
Проблема в том, что вы не можете настроить традиционные серверные перенаправления.
В качестве примера я последовал этому вопрос ответ направить http://<my_domain>.com
к https://www.<my_domain>.com
, Я использую псевдоним записи A для сегмента S3, который настроен как перенаправление статического сайта на https://www.<my_domain>.com
.
Как я могу получить https://<my_domain>.com
перенаправить на https://www.<my_domain>.com
в бессерверной среде, такой как Lambda?
Вам нужно будет выполнить перенаправление в вашей лямбда-функции.
Я уверен, что фактическое имя хоста, используемое в URL-адресе, передается в Lambda, возможно, как event.headers.Host
. Итак, в вашей Lambda вам нужно будет сделать что-то вроде этого кода в стиле Python:
def lambda_handler(event, context):
if not event['headers']['Host'].startswith('www'):
return PermanentRedirect('www.'+event['headers']['Host']+event['path'])
Однако на вашем месте я бы указал имя хоста без www на другой шлюз API с одной лямбдой, предназначенной для выполнения перенаправления на www. Тогда в вашем фактическом рабочий lambdas, вам не нужно беспокоиться о переадресации.
Надеюсь, это поможет :)
Я думаю, что для этого есть настройка в облачной среде. Либо так, либо используйте лямбда @ edge - так что вы не создаете «настоящие» лямбды.
Другой вариант, который я лично использую, - это поставить Cloudflare перед вашим облачным дистрибутивом - конечно, это две CDN, но Cloudflare чертовски легко может выполнять эти перенаправления.
Другой вариант - создать два облачных дистрибутива, один для www и один для не-www, но оба в конечном итоге будут на одном шлюзе API. Не идеально, поскольку преимущества кеширования будут ограничены, но это сработает.