Para alojar tu documentación en una subruta personalizada como yoursite.com/docs con Cloudflare, deberás crear y configurar un Cloudflare Worker.
Antes de empezar, necesitas una cuenta de Cloudflare y un nombre de dominio (puede gestionarse dentro o fuera de Cloudflare).

Estructura del repositorio

Los archivos de documentación deben organizarse dentro del repositorio para que coincidan con la estructura de subruta que elijas. Por ejemplo, si quieres que tu documentación esté en yoursite.com/docs, deberías crear un directorio docs/ con todos los archivos de documentación.

Configurar un Cloudflare Worker

Crea un Cloudflare Worker siguiendo la guía de inicio de Cloudflare Workers, si aún no lo has hecho.
Si tu proveedor de DNS es Cloudflare, no habilites el proxy para el registro CNAME.

Proxies con despliegues de Vercel

Si usas Cloudflare como proxy con despliegues de Vercel, debes asegurarte de una configuración correcta para evitar conflictos con la verificación de dominio de Vercel y la emisión de certificados SSL. Una configuración de proxy incorrecta puede impedir que Vercel emita certificados SSL de Let’s Encrypt y provocar errores en la verificación de dominio.

Lista de rutas permitidas obligatoria

Tu Cloudflare Worker debe permitir el tráfico a estas rutas específicas sin bloquear ni redirigir:
  • /.well-known/acme-challenge/* - Necesario para la verificación de certificados de Let’s Encrypt
  • /.well-known/vercel/* - Necesario para la verificación de dominios de Vercel
Aunque Cloudflare gestiona automáticamente muchas reglas de verificación, crear reglas personalizadas adicionales puede bloquear inadvertidamente este tráfico crítico.

Requisitos para el reenvío de encabezados

Asegúrate de que el encabezado HOST se reenvíe correctamente en la configuración de tu Worker. Si los encabezados no se reenvían correctamente, las solicitudes de verificación fallarán.

Configura el enrutamiento

En tu panel de Cloudflare, selecciona Edit Code y agrega el siguiente script al código de tu Worker. Consulta la documentación de Cloudflare para obtener más información sobre cómo editar un Worker.
Reemplaza [SUBDOMAIN] por tu subdominio único, [YOUR_DOMAIN] por la URL base de tu sitio web y /docs por la subruta deseada si es distinta.
addEventListener("fetch", (event) => {
  event.respondWith(handleRequest(event.request));
});

async function handleRequest(request) {
  try {
    const urlObject = new URL(request.url);
    
    // Si la solicitud es a una ruta de verificación de Vercel, permite que pase
    if (urlObject.pathname.startsWith('/.well-known/')) {
      return await fetch(request);
    }
    
    // Si la solicitud es al subdirectorio de docs
    if (/^\/docs/.test(urlObject.pathname)) {
      // Entonces haz proxy a Mintlify
      const DOCS_URL = "[SUBDOMAIN].mintlify.dev";
      const CUSTOM_URL = "[YOUR_DOMAIN]";

      let url = new URL(request.url);
      url.hostname = DOCS_URL;

      let proxyRequest = new Request(url, request);

      proxyRequest.headers.set("Host", DOCS_URL);
      proxyRequest.headers.set("X-Forwarded-Host", CUSTOM_URL);
      proxyRequest.headers.set("X-Forwarded-Proto", "https");
      // Si se despliega en Vercel, conserva la IP del cliente
      proxyRequest.headers.set("CF-Connecting-IP", request.headers.get("CF-Connecting-IP"));

      return await fetch(proxyRequest);
    }
  } catch (error) {
    // Si no se encuentra ninguna acción, procesa la solicitud normal
    return await fetch(request);
  }
}
Selecciona Deploy y espera a que se propaguen los cambios.
Después de configurar tu DNS, los subdominios personalizados suelen estar disponibles en pocos minutos. La propagación de DNS a veces puede tardar entre 1 y 4 horas y, en casos raros, hasta 48 horas. Si tu subdominio no está disponible de inmediato, espera antes de intentar solucionarlo.

Prueba tu Worker

Después de desplegar tu código, prueba tu Worker para asegurarte de que dirige a tu documentación de Mintlify.
  1. Prueba usando la URL de vista previa del Worker: your-worker.your-subdomain.workers.dev/docs
  2. Verifica que el Worker dirija a tu documentación de Mintlify y a tu sitio web.

Agregar un dominio personalizado

  1. En tu panel de Cloudflare, navega a tu Worker.
  2. Ve a Settings > Domains & Routes > Add > Custom Domain.
  3. Agrega tu dominio.
Recomendamos agregar tu dominio tanto con como sin www. al inicio.
Consulta Add a custom domain en la documentación de Cloudflare para obtener más información.

Resolver conflictos de DNS

Si tu dominio ya apunta a otro servicio, debes eliminar el registro DNS existente. Tu Cloudflare Worker debe estar configurado para controlar todo el tráfico de tu dominio.
  1. Elimina el registro DNS existente de tu dominio. Consulta Eliminar registros DNS en la documentación de Cloudflare para obtener más información.
  2. Vuelve a tu Worker y agrega tu dominio personalizado.

Enrutamiento personalizado en Webflow

Si usas Webflow para alojar tu sitio principal y quieres servir la documentación de Mintlify en /docs en el mismo dominio, tendrás que configurar un enrutamiento personalizado mediante Cloudflare Workers para redirigir mediante proxy todo el tráfico que no sea de docs hacia tu sitio principal.
Asegúrate de que tu sitio principal esté configurado en una página de aterrizaje antes de desplegar este Worker, o los visitantes de tu sitio principal verán errores.
  1. En Webflow, configura una página de aterrizaje para tu sitio principal, por ejemplo landing.yoursite.com. Esta será la página que verán los visitantes cuando accedan a tu sitio.
  2. Despliega tu sitio principal en la página de aterrizaje. Esto garantiza que tu sitio principal siga siendo accesible mientras configuras el Worker.
  3. Para evitar conflictos, actualiza cualquier URL absoluta en tu sitio principal para que sea relativa.
  4. En Cloudflare, selecciona Edit Code y agrega el siguiente script en el código de tu Worker.
Reemplaza [SUBDOMAIN] por tu subdominio único, [YOUR_DOMAIN] por la URL base de tu sitio web, [LANDING_DOMAIN] por la URL de tu página de aterrizaje y /docs por la subruta deseada si es distinta.
  addEventListener("fetch", (event) => {
  event.respondWith(handleRequest(event.request));
  });
  async function handleRequest(request) {
  try {
    const urlObject = new URL(request.url);
    
    // If the request is to a Vercel verification path, allow it to pass through
    if (urlObject.pathname.startsWith('/.well-known/')) {
      return await fetch(request);
    }
    
    // If the request is to the docs subdirectory
    if (/^\/docs/.test(urlObject.pathname)) {
      // Proxy to Mintlify
      const DOCS_URL = "[SUBDOMAIN].mintlify.dev";
      const CUSTOM_URL = "[YOUR_DOMAIN]";
      let url = new URL(request.url);
      url.hostname = DOCS_URL;
      let proxyRequest = new Request(url, request);
      proxyRequest.headers.set("Host", DOCS_URL);
      proxyRequest.headers.set("X-Forwarded-Host", CUSTOM_URL);
      proxyRequest.headers.set("X-Forwarded-Proto", "https");
      // If deploying to Vercel, preserve client IP
      proxyRequest.headers.set("CF-Connecting-IP", request.headers.get("CF-Connecting-IP"));
      return await fetch(proxyRequest);
    }
    // Route everything else to main site
    const MAIN_SITE_URL = "[LANDING_DOMAIN]";
    if (MAIN_SITE_URL && MAIN_SITE_URL !== "[LANDING_DOMAIN]") {
      let mainSiteUrl = new URL(request.url);
      mainSiteUrl.hostname = MAIN_SITE_URL;
      return await fetch(mainSiteUrl, {
        method: request.method,
        headers: request.headers,
        body: request.body
      });
    }
  } catch (error) {
    // If no action found, serve the regular request
    return await fetch(request);
  }
  }
  1. Selecciona Deploy y espera a que los cambios se propaguen.
Después de configurar tu DNS, los subdominios personalizados suelen estar disponibles en pocos minutos. La propagación de DNS a veces puede tardar entre 1 y 4 horas y, en casos raros, hasta 48 horas. Si tu subdominio no está disponible de inmediato, espera antes de intentar solucionarlo.