Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

227
Views
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 answers
Answer question

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!