> ## Documentation Index
> Fetch the complete documentation index at: https://mintlify-mintlify-add-i-to-quickstart-8818.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# Cloudflare

> Aloja la documentación en una subruta personalizada con Cloudflare Workers

Para alojar tu documentación en una subruta personalizada como `yoursite.com/docs` con Cloudflare, deberás crear y configurar un Cloudflare Worker.

<Info>
  Antes de comenzar, necesitas una cuenta de Cloudflare y un nombre de dominio (que puede gestionarse dentro o fuera de Cloudflare).
</Info>

<div id="repository-structure">
  ## Estructura del repositorio
</div>

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

<div id="set-up-a-cloudflare-worker">
  ## Configura un Cloudflare Worker
</div>

Crea un Cloudflare Worker siguiendo la [guía de inicio de Cloudflare Workers](https://developers.cloudflare.com/workers/get-started/dashboard/), si aún no lo has hecho.

<Warning>
  Si tu proveedor de DNS es Cloudflare, no uses el proxy para el registro CNAME.
</Warning>

<div id="proxies-with-vercel-deployments">
  ### Proxies con implementaciones de Vercel
</div>

Si usas Cloudflare como proxy con implementaciones de Vercel, debes asegurarte de configurarlo correctamente 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.

<div id="required-path-allowlist">
  #### Lista de rutas permitidas requerida
</div>

Tu Cloudflare Worker debe permitir el tráfico a estas rutas específicas sin bloquear ni redirigir:

* `/.well-known/acme-challenge/*` - Obligatorio para la verificación de certificados de Let's Encrypt
* `/.well-known/vercel/*` - Obligatorio 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.

<div id="header-forwarding-requirements">
  #### Requisitos para el reenvío de encabezados
</div>

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 adecuadamente, las solicitudes de verificación fallarán.

<div id="configure-routing">
  ### Configurar el enrutamiento
</div>

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](https://developers.cloudflare.com/workers-ai/get-started/dashboard/#development) para obtener más información sobre cómo editar un Worker.

<Tip>
  Reemplaza `[SUBDOMAIN]` por tu subdominio único, `[YOUR_DOMAIN]` por la URL base de tu sitio web y `/docs` por la subruta que desees si es diferente.
</Tip>

```javascript
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, déjala pasar
    if (urlObject.pathname.startsWith('/.well-known/')) {
      return await fetch(request);
    }
    
    // Si la solicitud es al subdirectorio /docs
    if (/^\/docs/.test(urlObject.pathname)) {
      // Entonces hacer 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 estás desplegando 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 coincidencia, realizar la solicitud normal
    return await fetch(request);
  }
}
```

Selecciona **Deploy** y espera a que los cambios se propaguen.

<Note>
  Después de configurar tu DNS, los subdominios personalizados suelen estar disponibles en pocos minutos. La propagación del DNS a veces puede tardar entre 1 y 4 horas y, en casos poco frecuentes, hasta 48 horas. Si tu subdominio no está disponible de inmediato, espera antes de intentar solucionarlo.
</Note>

<div id="test-your-worker">
  ### Prueba tu Worker
</div>

Después de desplegar tu código, prueba tu Worker para asegurarte de que redirige 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 redirige a tu documentación de Mintlify y a tu sitio web.

<div id="add-custom-domain">
  ### Agregar un dominio personalizado
</div>

1. En tu [panel de Cloudflare](https://dash.cloudflare.com/), ve a tu Worker.
2. Ve a **Settings > Domains & Routes > Add > Custom Domain**.
3. Agrega tu dominio.

<Tip>
  Recomendamos agregar tu dominio tanto con como sin `www.`.
</Tip>

Consulta [Add a custom domain](https://developers.cloudflare.com/workers/configuration/routing/custom-domains/#add-a-custom-domain) en la documentación de Cloudflare para obtener más información.

<div id="resolve-dns-conflicts">
  ### Resolver conflictos de DNS
</div>

Si tu dominio ya apunta a otro servicio, debes eliminar el registro DNS existente. Tu Cloudflare Worker debe estar configurado para gestionar todo el tráfico de tu dominio.

1. Elimina el registro DNS existente para tu dominio. Consulta [Delete DNS records](https://developers.cloudflare.com/dns/manage-dns-records/how-to/create-dns-records/#delete-dns-records) en la documentación de Cloudflare para obtener más información.
2. Vuelve a tu Worker y añade tu dominio personalizado.

<div id="webflow-custom-routing">
  ## Enrutamiento personalizado en Webflow
</div>

Si usas Webflow para alojar tu sitio principal y quieres servir la documentación de Mintlify en `/docs` dentro del mismo dominio, tendrás que configurar un enrutamiento personalizado con Cloudflare Workers para enrutar mediante proxy todo el tráfico que no sea de la documentación hacia tu sitio principal.

<Warning>
  Asegúrate de que tu sitio principal esté configurado en una landing page antes de desplegar este Worker; de lo contrario, los visitantes de tu sitio principal verán errores.
</Warning>

1. En Webflow, configura una landing page para tu sitio principal, por ejemplo `landing.yoursite.com`. Esta será la página que verán los visitantes cuando ingresen a tu sitio.
2. Despliega tu sitio principal en la landing page. 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.

<Tip> Reemplaza `[SUBDOMAIN]` con tu subdominio único, `[YOUR_DOMAIN]` con la URL base de tu sitio web, `[LANDING_DOMAIN]` con la URL de tu landing page y `/docs` con la subruta que desees, si es diferente. </Tip>

```javascript
  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, deja 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)) {
      // Proxy hacia 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, conservar la IP del cliente
      proxyRequest.headers.set("CF-Connecting-IP", request.headers.get("CF-Connecting-IP"));
      return await fetch(proxyRequest);
    }
    // Redirige todo lo demás al sitio principal
    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) {
    // Si no se encuentra ninguna acción, servir la solicitud normal
    return await fetch(request);
  }
  }
```

5. Selecciona **Deploy** y espera a que los cambios se propaguen.

<Note>
  Después de configurar tu DNS, los subdominios personalizados suelen estar disponibles en pocos minutos. La propagación del DNS a veces puede tardar entre 1 y 4 horas y, en casos poco frecuentes, hasta 48 horas. Si tu subdominio no está disponible de inmediato, espera antes de intentar solucionarlo.
</Note>
