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

# Vercel

> Aloja la documentación en una subruta personalizada con Vercel

export const VercelJsonGenerator = () => {
  const [subdomain, setSubdomain] = useState('[SUBDOMAIN]');
  const [subdirectory, setSubdirectory] = useState('docs');
  const vercelConfig = {
    rewrites: [{
      source: "/_mintlify/api/request",
      destination: `https://${subdomain}.mintlify.app/_mintlify/api/request`
    }, {
      source: "/api/request",
      destination: `https://${subdomain}.mintlify.app/_mintlify/api/request`
    }, {
      source: `/${subdirectory}`,
      destination: `https://${subdomain}.mintlify.app`
    }, {
      source: `/${subdirectory}/llms.txt`,
      destination: `https://${subdomain}.mintlify.app/llms.txt`
    }, {
      source: `/${subdirectory}/llms-full.txt`,
      destination: `https://${subdomain}.mintlify.app/llms-full.txt`
    }, {
      source: `/${subdirectory}/sitemap.xml`,
      destination: `https://${subdomain}.mintlify.app/sitemap.xml`
    }, {
      source: `/${subdirectory}/robots.txt`,
      destination: `https://${subdomain}.mintlify.app/robots.txt`
    }, {
      source: `/${subdirectory}/:path*`,
      destination: `https://${subdomain}.mintlify.app/${subdirectory}/:path*`
    }, {
      source: "/mintlify-assets/:path+",
      destination: `https://${subdomain}.mintlify.app/mintlify-assets/:path+`
    }]
  };
  const copyToClipboard = () => {
    navigator.clipboard.writeText(JSON.stringify(vercelConfig, null, 2)).then(() => {
      console.log('Copied config to clipboard!');
    }).catch(err => {
      console.error("Failed to copy: ", err);
    });
  };
  return <div className="p-4 border dark:border-white/10 rounded-2xl not-prose space-y-4">
      <div className="space-y-4">
        <div>
          <label className="block text-sm text-zinc-950/70 dark:text-white/70 mb-1">
            Subdomain
          </label>
          <input type="text" value={subdomain} onChange={e => setSubdomain(e.target.value)} placeholder="your-subdomain" className="w-full p-1 text-sm rounded border dark:border-white/10 bg-transparent" />
        </div>
        <div>
          <label className="block text-sm text-zinc-950/70 dark:text-white/70 mb-1">
            Subdirectory
          </label>
          <input type="text" value={subdirectory} onChange={e => setSubdirectory(e.target.value)} placeholder="docs" className="w-full p-1 text-sm rounded border dark:border-white/10 bg-transparent" />
        </div>
      </div>
      <div className="relative">
        <button onClick={copyToClipboard} className="absolute top-2 right-2 p-2 rounded-lg transition-all duration-200 group">
          <svg width="18" height="18" viewBox="0 0 18 18" fill="none" xmlns="http://www.w3.org/2000/svg" className="w-4 h-4 dark:text-white/60 text-gray-400 group-hover:text-gray-500 dark:group-hover:text-white/60 transition-colors">
            <path d="M14.25 5.25H7.25C6.14543 5.25 5.25 6.14543 5.25 7.25V14.25C5.25 15.3546 6.14543 16.25 7.25 16.25H14.25C15.3546 16.25 16.25 15.3546 16.25 14.25V7.25C16.25 6.14543 15.3546 5.25 14.25 5.25Z" stroke="currentColor" strokeWidth="1.5" strokeLinecap="round" strokeLinejoin="round"></path>
            <path d="M2.80103 11.998L1.77203 5.07397C1.61003 3.98097 2.36403 2.96397 3.45603 2.80197L10.38 1.77297C11.313 1.63397 12.19 2.16297 12.528 3.00097" stroke="currentColor" strokeWidth="1.5" strokeLinecap="round" strokeLinejoin="round"></path>
          </svg>
          <span className="absolute top-9 left-1/2 transform -translate-x-1/2 bg-primary text-white text-xs px-1.5 py-0.5 rounded-lg opacity-0 group-hover:opacity-100 transition-opacity duration-200 whitespace-nowrap">
            Copy
          </span>
        </button>
        <pre className="p-4 rounded-lg overflow-auto text-xs border dark:border-white/10">
          <code>{JSON.stringify(vercelConfig, null, 2)}</code>
        </pre>
      </div>
    </div>;
};

<div id="verceljson-file">
  ## archivo vercel.json
</div>

El archivo `vercel.json` define cómo se compila y se implementa tu proyecto. Se ubica en el directorio raíz y controla varios aspectos de la implementación, como el enrutamiento, las redirecciones, los encabezados y la configuración de compilación.

Usamos la configuración `rewrites` para hacer de proxy las solicitudes desde tu dominio principal hacia tu documentación.

Las reescrituras mapean las solicitudes entrantes a distintos destinos sin cambiar la URL en el navegador. Cuando alguien visita `yoursite.com/docs`, Vercel obtendrá internamente el contenido desde `your-subdomain.mintlify.dev/docs`, pero la persona seguirá viendo `yoursite.com/docs` en su navegador. Esto difiere de las redirecciones, que enviarían a los usuarios a una URL completamente distinta.

Puedes personalizar la subruta con cualquier valor que prefieras, como `/docs`, `/help` o `/guides`. Además, puedes usar subrutas profundamente anidadas como `/product/docs`.

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

Tus archivos de documentación deben estar organizados dentro de tu repositorio para que coincidan con la estructura de la subruta que elijas. Por ejemplo, si quieres tu documentación en `yoursite.com/docs`, deberías crear un directorio `docs/` con todos tus archivos de documentación.

<div id="configuration">
  ## Configuración
</div>

Para alojar tu documentación en una subruta personalizada con Vercel, agrega la siguiente configuración a tu archivo `vercel.json`. Este ejemplo usa `/docs`, pero puedes reemplazarlo por cualquier subruta:

```json theme={null}
{
  "rewrites": [
    {
      "source": "/docs",
      "destination": "https://[subdomain].mintlify.dev/docs"
    },
    {
      "source": "/docs/:match*",
      "destination": "https://[subdomain].mintlify.dev/docs/:match*"
    }
  ]
}
```

* **`source`**: El patrón de ruta en tu domain que activa la reescritura.
* **`destination`**: A dónde se debe enrutar por proxy la solicitud.
* **`:match*`**: Un comodín que captura cualquier segmento de ruta después de tu subruta.

Para obtener más información, consulta [Configuring projects with vercel.json: Rewrites](https://vercel.com/docs/projects/project-configuration#rewrites) en la documentación de Vercel.

<div id="generate-rewrites">
  ### Generar redirecciones
</div>

Ingresa tu subdomain y el subdirectorio personalizado para generar las redirecciones de tu archivo `vercel.json`.

<VercelJsonGenerator />

<div id="using-external-proxies-with-vercel">
  ## Uso de proxies externos con Vercel
</div>

Si utilizas un proxy externo (como Cloudflare o AWS CloudFront) delante de tu implementación en Vercel, debes configurarlo correctamente para evitar conflictos con la verificación del domain de Vercel y el aprovisionamiento de certificados SSL.

Una configuración incorrecta del proxy puede impedir que Vercel aprovisione certificados SSL de Let's Encrypt y provocar fallos en la verificación del domain.

Consulta los [proveedores compatibles](https://vercel.com/guides/how-to-setup-verified-proxy#supported-providers-verified-proxy-lite) en la documentación de Vercel.

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

Tu proxy externo debe permitir el tráfico a estas rutas específicas sin bloquear, redirigir ni aplicar un almacenamiento en caché agresivo:

* `/.well-known/acme-challenge/*` - Obligatorio para la verificación de certificados de Let's Encrypt
* `/.well-known/vercel/*` - Obligatorio para la verificación de domain de Vercel
* `/mintlify-assets/_next/static/*` - Obligatorio para los recursos estáticos

Estas rutas deben pasar directamente a tu implementación en Vercel sin modificaciones.

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

Asegúrate de que tu proxy reenvíe correctamente el encabezado `HOST`. Sin un reenvío adecuado de ese encabezado, las solicitudes de verificación fallarán.

<div id="testing-your-proxy-setup">
  ### Probar la configuración de tu proxy
</div>

Para verificar que tu proxy esté configurado correctamente:

1. Comprueba que `https://[yourdomain].com/.well-known/vercel/` devuelva una respuesta.
2. Asegúrate de que los certificados SSL se estén aprovisionando correctamente en tu dashboard de Vercel.
3. Verifica que la verificación del domain se complete correctamente.
