Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

230
Visualizações
AWS Lambda@Edge 502 LambdaValidationError en CloudFront para redirección

Tengo una función lambda que realiza una redirección 301 si tiene uri que se genera usando expresiones regulares.

 const redirects = { xyz: '/contact', abc: '/about', }; const arrRegex = [ { regex: /\xyz/\faq/\max, redirect: redirects.xyz }, { regex: /\abc/\faq/\min, redirect: redirects.abc }, { regex: /\lmn\?page=[1-9]/, redirectNotNeeded } ]; function redirect(request) { let requests = request.uri; let finalUrl = ''; arrRegex.some(reg => { const re = new RegExp(reg.regex); if (requests.match(re) && reg.redirectNotNeeded) { finalUrl = request; return true; } else if (requests.match(re) && reg.redirect) { finalUrl = reg.redirect; return true; } else { return requests.match(re) && !reg.redirect; } }); return finalUrl; } exports.handler = (event, context, callback) => { // find request URL const request = event.Records[0].cf.request; request.uri = redirect(request); let prefixPath; // needed for 2nd condition if (request.uri.match('.+/$')) { request.uri += 'index.html'; callback(null, request); } else if (prefixPath = request.uri.match('(.+)/index.html')) { const response = { status: '301', statusDescription: 'Found', headers: { location: [{ key: 'Location', value: prefixPath[1] + '/', }], } }; callback(null, response); } else if (request.uri.match('/[^/.]+$')) { const response = { status: '301', statusDescription: 'Found', headers: { location: [{ key: 'Location', value: request.uri + '/', }], } }; callback(null, response); } else { callback(null, request); } };

Al implementar la función y agregarla a los comportamientos de la nube, cuando voy a la URL https:my-website/xyz/faq/max , aunque veo el estado 301 para https:my-website/xyz/faq/max después de redirigir correctamente a https:my-website/contact , muestra el error 502. También muestra el mismo error para https:my-website . En el cromo debajo del estado, veo LambdaValidationError from cloudfront debajo del encabezado de respuesta. ¿Puedo saber qué estoy haciendo mal aquí para arrojar este error? Las páginas son solo páginas estáticas almacenadas en un depósito de AWS S3 servido con Amazon CloudFront.

about 4 years ago · Juan Pablo Isaza
1 Respostas
Responde à pergunta

0

Cambiando let finalUrl = ''; let finalUrl = request.uri; me ayudó a deshacerme del error ya que lo estaba configurando en una cadena vacía, la lambda arrojaba un error 502 ya que no podía redirigir el tráfico cuando no había uri en la solicitud.

 const redirects = { xyz: '/contact', abc: '/about', }; const arrRegex = [ { regex: /\xyz/\faq/\max, redirect: redirects.xyz }, { regex: /\abc/\faq/\min, redirect: redirects.abc }, { regex: /\lmn\?page=[1-9]/, redirectNotNeeded } ]; function redirect(request) { let requests = request.uri; let finalUrl = request.uri; arrRegex.some(reg => { const re = new RegExp(reg.regex); if (requests.match(re) && reg.redirectNotNeeded) { finalUrl = request; return true; } else if (requests.match(re) && reg.redirect) { finalUrl = reg.redirect; return true; } else { return requests.match(re) && !reg.redirect; } }); return finalUrl; } exports.handler = (event, context, callback) => { // find request URL const request = event.Records[0].cf.request; request.uri = redirect(request); let prefixPath; // needed for 2nd condition if (request.uri.match('.+/$')) { request.uri += 'index.html'; callback(null, request); } else if (prefixPath = request.uri.match('(.+)/index.html')) { const response = { status: '301', statusDescription: 'Found', headers: { location: [{ key: 'Location', value: prefixPath[1] + '/', }], } }; callback(null, response); } else if (request.uri.match('/[^/.]+$')) { const response = { status: '301', statusDescription: 'Found', headers: { location: [{ key: 'Location', value: request.uri + '/', }], } }; callback(null, response); } else { callback(null, request); } };
about 4 years ago · Juan Pablo Isaza Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda