JavaScript / Intermedio / 5 min
Worker Cloudflare: Redirects 301 en edge
Worker JavaScript para gestionar cientos de redirects 301 en el edge de Cloudflare sin tocar tu servidor.
Cuando migras un sitio o reestructuras URLs, necesitas gestionar redirects sin añadir carga al servidor de origen.
Un Cloudflare Worker procesa esas reglas en el edge antes de que la petición llegue a WordPress, Nginx o Apache. Esto reduce latencia y facilita mantener redirects exactos o por prefijo.
Guía de Implementación Paso a Paso
- Entra a Cloudflare Dashboard >
Workers & Pages>Create Worker. - Nombra el worker, por ejemplo
redirects-manager, y despliega. - Reemplaza el código por este snippet y personaliza
REDIRECTS. - Configura la ruta
tusitio.com/*enSettings>Triggers. - Verifica con
curl.
BASH
curl -I https://tusitio.com/url-vieja
JAVASCRIPT
/**
* KODFLUX - Cloudflare Worker: Gestor de Redirects 301
* Procesa redirects en el edge sin tocar el servidor.
*/
const REDIRECTS = {
// Migración de blog
"/blog/categoria-vieja": "/blog/categoria-nueva",
"/articulos": "/blog",
"/noticias": "/blog",
// Páginas renombradas
"/nosotros": "/sobre-nosotros",
"/contactanos": "/contacto",
"/servicios-web": "/servicios",
// Productos o páginas eliminadas
"/producto-descontinuado": "/catalogo",
"/promo-2024": "/promociones",
// Landing pages antiguas
"/lp/webinar-enero": "/recursos/webinar-grabado",
"/lp/ebook": "/recursos/ebooks",
// Redirecciones de campaña
"/go/youtube": "https://www.youtube.com/@tucanal",
"/go/instagram": "https://instagram.com/tuperfil",
"/go/whatsapp": "https://wa.me/51999999999",
// Wildcards por prefijo
"/docs-antiguos/*": "/docs/",
};
export default {
async fetch(request, env, ctx) {
const url = new URL(request.url);
const pathname = url.pathname;
const normalizedPath =
pathname !== "/" && pathname.endsWith("/")
? pathname.slice(0, -1)
: pathname;
if (REDIRECTS[normalizedPath]) {
const destination = REDIRECTS[normalizedPath];
const finalUrl = destination.startsWith("http")
? destination
: `${url.origin}${destination}`;
return new Response(null, {
status: 301,
headers: {
Location: finalUrl,
"Cache-Control": "public, max-age=31536000",
"X-Redirected-By": "Cloudflare-Worker",
},
});
}
for (const [source, dest] of Object.entries(REDIRECTS)) {
if (source.endsWith("*") && normalizedPath.startsWith(source.slice(0, -1))) {
const suffix = normalizedPath.slice(source.length - 1);
const finalUrl = dest.startsWith("http")
? dest
: `${url.origin}${dest}${suffix}`;
return new Response(null, {
status: 301,
headers: {
Location: finalUrl,
"Cache-Control": "public, max-age=31536000",
"X-Redirected-By": "Cloudflare-Worker",
},
});
}
}
return fetch(request);
},
};
Prompt para Codex
TEXT
Crea un Cloudflare Worker en JavaScript moderno (ES modules, export default) que gestione redirects 301 de forma eficiente en el edge.
Características requeridas:
- Objeto REDIRECTS configurable en la parte superior del archivo con rutas relativas como claves
- Soporte para URLs relativas ("/origen": "/destino") y absolutas ("/origen": "https://externo.com")
- Normalización de trailing slash (eliminar al final excepto en "/")
- Búsqueda de redirect exacto primero
- Búsqueda de redirect por prefijo (usando wildcard "*" al final de la clave)
- Response 301 con headers: Location, Cache-Control: public max-age=31536000, X-Redirected-By: Cloudflare-Worker
- Si no hay redirect, hacer fetch(request) para pasar al origen
- Incluir al menos 10 ejemplos de redirects comentados en el objeto REDIRECTS
- Formato: Worker moderno con export default { async fetch(request, env, ctx) }
El código debe ser desplegable directamente en Cloudflare Workers Dashboard.