Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

226
Vistas
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 Respuestas
Responde la pregunta

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 Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda