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

127
Visualizações
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 Respostas
Responde à pergunta

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 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