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

125
Views
Regex de nombre de ruta y dominio comodín para redirección

Estoy tratando de hacer que la redirección por lotes funcione en los trabajadores de Cloudflare. Aquí hay una serie from to y destino, algunos serán dominios cruzados.

 const redirects = [ { "from": "https://some.domain.tld/product/*", "to": "https://another.domain.tld/product/*" }, ]

Me gustaría respetar los comodines e intentar redirigir según el nombre de ruta de la URL.

aquí está mi intento, pero esto es solo para rutas fijas y no para dominios cruzados. Es un poco difícil probar el dominio cruzado en el editor de juegos de trabajadores.

 async function handleRequest(request) { const url = new URL(request.url) const host = url.hostname; const path = url.pathname; const queryStrings = url.search; const location = redirects.find(r => { return r.from.includes(path); }); if (location) { return Response.redirect('https://' + host + location.to + queryStrings, 301) } return fetch(request) } addEventListener("fetch", async event => { event.respondWith(handleRequest(event.request)) })

¿Cómo puedo cambiar este código para que respete las redirecciones con comodines? Lo más probable es que los comodines siempre estén al final, algunos nombres de ruta no tendrán comodines y no siempre será /product sino cualquier nombre de ruta que esté en el objeto de redirección.

Actualizado después de la respuesta:

 const redirects = [ { "from": "https://red.domain.com/product-1/*", "to": "https://blue.domain.com/product-1/*" }, ] async function handleRequest(request) { const url = 'https://red.domain.com/product-1/fees'; const location = redirects.reduce((loc, r) => { let match = url.split(r.from.replace("*", "")[1]); if (match) return r.to.replace("*", "") + match; }, ""); if (location) { return Response.redirect(location, 301) } return fetch(request) } addEventListener("fetch", async event => { event.respondWith(handleRequest(event.request)) })

resultado:

https://blue.domain.com/product-1/h,,ps://red.domain.com/produc,-1/fees

about 4 years ago · Juan Pablo Isaza
1 answers
Answer question

0

Puede hacer coincidir la URL completa con sus redireccionamientos usando Array#split() , mientras recupera la parte "después" del comodín:

 console.log( "https://some.domain.tld/product/foo/bar/baz?test=baf".split("https://some.domain.tld/product/")[1] )

Para las URL que no coincidan con esta redirección, el resultado será undefined , por lo que:

 const redirects = [ { "from": "https://some.domain.tld/product/*", "to": "https://another.domain.tld/product/*" }, ] async function handleRequest(request) { const {url} = request; const location = redirects.reduce((loc, r) => { let match = url.split(r.from.replace("*","")[1]; // remove wildcard * for matching if(match) return r.to.replace("*","") + match; },"") if (location) { return Response.redirect(location, 301) } return fetch(request) } addEventListener("fetch", async event => { event.respondWith(handleRequest(event.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!