Kodflux
Kodflux
Crear cuenta gratisIniciar Sesión

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

  1. Entra a Cloudflare Dashboard > Workers & Pages > Create Worker.
  2. Nombra el worker, por ejemplo redirects-manager, y despliega.
  3. Reemplaza el código por este snippet y personaliza REDIRECTS.
  4. Configura la ruta tusitio.com/* en Settings > Triggers.
  5. 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.

Buscar en Kodflux