---
title: "Archivos, carpetas y direcciones"
description: "Los archivos y carpetas de Éclair explicados: data/, cache/, media/, eclair-config.php, .htaccess, Nginx, permisos, copias y direcciones generadas."
url: "https://eclair.academy/es/documentacion/archivos"
lang: "es"
author: "Thierry Gustin"
published: "2026-11-02"
updated: "2026-11-02"
---

# Archivos, carpetas y direcciones

> **Lo esencial** — Éclair cabe en una carpeta. index.php sirve las páginas, app/ y assets/ contienen el código, data/ guarda contenidos, ajustes y cuentas, cache/ las páginas generadas y media/ las imágenes. Solo hay que hacer copia de seguridad de data/ y media/. El .htaccess protege las carpetas internas, y Éclair genera por sí solo sitemap.xml, robots.txt, llms.txt, los feeds y las versiones Markdown.

En Éclair, todo lo que forma tu sitio vive en archivos y carpetas que puedes ver por FTP: no hay base de datos. Esta referencia describe la estructura de carpetas, la función de cada archivo de `data/`, los ajustes de `eclair-config.php`, las reglas del `.htaccess` y de Nginx, los permisos necesarios, qué incluir en las copias de seguridad y todas las direcciones que el sitio genera solo.

## La estructura de la carpeta eclair

Es el contenido de esta carpeta lo que subes a la carpeta pública de tu hosting (`public_html`, `www`…).

```text
eclair/
├── index.php                  controlador frontal: sirve la caché sin cargar la aplicación
├── .htaccess                  reescritura, protecciones, compresión, caché del navegador
├── eclair-config.exemple.php  plantilla de los ajustes avanzados opcionales
├── app/                       el código de Éclair (nunca accesible desde la web)
│   ├── bootstrap.php          arranque: versión de PHP, eclair-config.php, carga
│   ├── manifest.php           huellas originales para el control de integridad
│   ├── lib/                   clases: Content, Blocks, Seo, Analyzer, Media, Auth, Mcp…
│   ├── admin/views/           pantallas de la administración (.php.gz en el archivo ZIP)
│   ├── install/               asistente de instalación y pantalla «Instalación bloqueada»
│   ├── lang/                  traducciones de la administración (6 idiomas, JSON comprimido)
│   └── theme/                 plantillas del sitio público, theme.css, themes/, directions.css
├── assets/
│   ├── admin/                 CSS y JavaScript de la administración
│   └── site/site.js           el único script del sitio público (1,2 KB comprimido)
├── data/                      contenidos, ajustes, cuentas: nunca público
├── cache/                     páginas generadas: nunca público
└── media/                     imágenes subidas, iconos del sitio, fuente de los títulos
```

`app/` y `assets/` contienen el código: una actualización los sustituye. Tus datos están en `data/` y `media/`, que las actualizaciones no tocan nunca. El archivo ZIP oficial contiene también, junto a la carpeta `eclair`, los archivos `LISEZ-MOI.txt`, `LICENSE.txt` y `THIRD-PARTY-NOTICES.txt`: no hace falta subirlos a tu hosting.

## ¿Cómo se sirve una página?

![Ciclo de una petición: página servida desde la caché estática o generada por la aplicación](https://eclair.academy/media/2026/11/eclair-academy-architecture-es.png)
*El camino rápido de la caché estática*

1. Toda petición de página llega a `index.php`; las imágenes, los CSS y los scripts los sirve directamente el servidor. Para una lectura (`GET` o `HEAD`), `index.php` lee `cache/runtime.php`: caché activa, fecha de caducidad, dominio y HTTPS exigidos.
2. Si la página existe en `cache/pages/`, se envía tal cual, con su ETag; un navegador que ya la tiene recibe una respuesta `304 Not Modified`.
3. Si no, `app/bootstrap.php` arranca la aplicación: comprueba la versión de PHP, lee `eclair-config.php` si existe y después dirige la petición a la instalación, la administración, el formulario, el conector MCP o el sitio. La página generada se guarda en caché para las visitas siguientes.

El detalle del código está en [La arquitectura de Éclair](https://eclair.academy/es/rutas/experto/arquitectura).

## ¿Qué contiene la carpeta data?

Cada archivo de `data/` es un archivo `.php` que empieza por la línea `<?php exit; ?>`, seguida de datos JSON. Aunque un servidor ignorara los `.htaccess`, abrirlo en un navegador no mostraría nada. Las escrituras son atómicas (archivo temporal y luego cambio de nombre) y los archivos son privados.

| Archivo o carpeta | Contenido | En la copia de seguridad ZIP |
| --- | --- | --- |
| `site.php` | Todos los ajustes de las pestañas de Ajustes | Sí |
| `users.php` | Cuentas, huellas de las contraseñas, verificación en dos pasos | Sí |
| `keys.php` | Claves secretas creadas durante la instalación (secreto del sitio, clave de IndexNow) | Sí |
| `vault.php` | Claves de API del asistente IA, cifradas | No |
| `index.php` | Resumen de todos los contenidos, para listarlos y encontrar rápido una dirección | Sí |
| `content/` | Un archivo por página, artículo o producto | Sí |
| `revisions/` | Las 20 últimas versiones de cada contenido | Sí |
| `search.php` | Texto de los contenidos para la búsqueda del sitio | Sí |
| `media.php` | Registro de la biblioteca de medios: archivos, dimensiones, textos alternativos | Sí |
| `categories.php`, `menus.php`, `redirects.php` | Categorías, menús y redirecciones | Sí |
| `custom-css.php` | Tu CSS personalizado | Sí |
| `inbox.php` y `messages/` | Bandeja de entrada del formulario, 500 mensajes como máximo | Sí |
| `indexnow.php` | Fecha y resultado del último envío a IndexNow | Sí |
| `logs/` | Registro de seguridad y errores técnicos, 1 MB como máximo cada uno | Sí |
| `sessions/` | Sesiones abiertas, con un nombre en forma de hash | No |
| `limits/` | Contadores contra la fuerza bruta y el spam | No |
| `ai/` | Gastos, conversaciones (30 por persona), propuestas, anulaciones, conexiones MCP | No |
| `install-window.php` | Inicio de la ventana de instalación de 2 horas; se borra al terminar la instalación | No aplica |
| `reset.php` | Rescate de «contraseña olvidada», lo creas tú y se borra automáticamente | No |

> **No modifiques estos archivos a mano** — Un JSON dañado deja el dato ilegible. En `data/`, el único archivo pensado para crearse por FTP es `reset.php`: sus pasos están en [Solución de problemas](https://eclair.academy/es/documentacion/solucion-de-problemas).

## Las carpetas cache y media

### cache/

| Elemento | Función |
| --- | --- |
| `runtime.php` | Ajustes del camino rápido: caché activa, caducidad en el próximo artículo programado, dominio y HTTPS exigidos |
| `pages/` | Una página generada por dirección, con el nombre de la huella md5 de su ruta: una línea de cabeceras y de ETag, y después el HTML |
| `backup-….zip` | Copia de seguridad en plena descarga, que se borra después; si la descarga se interrumpió, se elimina al vaciar la caché, al menos una hora más tarde |

La caché se vacía sola con cada cambio, y a la hora prevista para un artículo programado. Para vaciarla a mano: **Ajustes › Avanzado › Vaciar la caché**.

### media/

| Elemento | Función |
| --- | --- |
| `2026/11/…` | Imágenes subidas, ordenadas por año y por mes |
| `photo.jpg`, `.png`, `.webp` o `.gif` | La imagen recodificada, de 2000 px de ancho como máximo, sin datos EXIF ni GPS (con la extensión GD) |
| `photo-480.webp` a `photo-1600.webp` | Variantes WebP de 480, 800, 1200 y 1600 px (solo las más pequeñas que el original), más una versión WebP del tamaño de la imagen |
| `photo-og.jpg` | Imagen para compartir de 1200 × 630, creada la primera vez que se usa |
| `site/icon-32.png`, `icon-180.png`, `icon-192.png`, `icon-512.png` | Iconos del sitio: favicon y pantalla de inicio de los móviles |
| `fonts/` | Fuente de los títulos de tu dirección de arte (`.woff2`), descargada una sola vez |

El archivo `media/.htaccess` solo autoriza imágenes: ni scripts, ni páginas HTML, ni SVG, ni listados de archivos, con una política de seguridad que prohíbe cualquier contenido activo. Las subidas se explican en [Imágenes y biblioteca de medios de Éclair](https://eclair.academy/es/rutas/principiante/imagenes-mediateca).

## ¿Qué poner en eclair-config.php?

Este archivo opcional se coloca junto a `index.php`. Copia `eclair-config.exemple.php` con el nombre `eclair-config.php` y quita el comentario de lo que necesites. Se lee al arrancar la aplicación, antes que todo lo demás, y el control de integridad no lo señala como archivo desconocido.

```php
<?php
defined('ECLAIR') || exit;

// Detalle de los errores, mientras resuelves un problema:
// define('ECLAIR_DEBUG', true);

// Datos fuera de la carpeta pública (mueve antes la carpeta data):
// define('ECLAIR_DATA', '/home/micuenta/eclair-data');

// Protección reforzada de las claves de API, que se define antes de guardarlas:
// define('ECLAIR_SECRET', 'una-frase-secreta-larga');
```

| Constante | Efecto | Precaución |
| --- | --- | --- |
| `ECLAIR_DEBUG` | Muestra el detalle de los errores | También desactiva la caché estática: borra la línea cuando el problema esté resuelto |
| `ECLAIR_DATA` | Guarda los datos en otra ubicación (ruta absoluta) | Mueve antes `data/`, y acuérdate de incluir la nueva ubicación en tus copias de seguridad |
| `ECLAIR_SECRET` | Añade una frase secreta al cifrado de las claves de API | Defínela antes de guardar tus claves; si la añades o la cambias después, tendrás que volver a pegarlas |

El código reconoce también dos constantes técnicas que no aparecen en la guía oficial: `ECLAIR_AI_ENDPOINTS` (dirección alternativa de un servicio de IA, para una pasarela o para pruebas) y `ECLAIR_FONTS_URL` (origen de las fuentes, por defecto Fontsource a través de `cdn.jsdelivr.net`). Úsalas solo si sabes por qué. `ECLAIR_VERSION` y `ECLAIR_ROOT` las fija `index.php`.

## Las reglas del .htaccess explicadas

El `.htaccess` de Éclair funciona tanto en la raíz de un dominio como en una subcarpeta. Solo usa directivas permitidas en los hostings compartidos: nada de `Options` ni de `php_flag`. Esta es su parte de reescritura:

```apache
RewriteEngine On
# RewriteBase /
RewriteCond %{HTTP:Authorization} .
RewriteRule ^ - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
RewriteRule ^(app|data|cache)(/|$) - [R=404,L]
RewriteRule (^|/)\.(?!well-known/) - [R=404,L]
RewriteRule ^(?!index\.php$).*\.(php\d?|phtml|phar|inc)$ - [R=404,NC,L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L,QSA]
```

1. `RewriteBase /` sigue comentada: quítale el comentario solo si tu proveedor lo exige, algo poco habitual.
2. Las dos líneas `Authorization` transmiten a PHP la cabecera de autorización que algunos hostings eliminan. El conector MCP la necesita.
3. `app/`, `data/` y `cache/` responden 404 desde la web.
4. Los archivos ocultos (`.git`, `.env`…) responden 404, salvo la carpeta `.well-known`.
5. Ningún script PHP se ejecuta fuera de `index.php`.
6. Todo lo que no sea un archivo existente pasa por `index.php`, incluso una carpeta: nunca se muestra un listado de archivos.

El resto del archivo activa la compresión Brotli o Gzip de las páginas HTML, las hojas CSS, el JavaScript, los datos JSON y XML, los feeds RSS, las imágenes SVG y el Markdown, una caché del navegador de un año para las imágenes, los CSS, los scripts y las fuentes (`Cache-Control: public, max-age=31536000, immutable`), y declara los tipos WebP, AVIF y WOFF2. Las carpetas `app/`, `data/` y `cache/` tienen además su propio `.htaccess`, que deniega cualquier acceso: la protección es doble.

> **Los archivos ocultos no se suben solos** — Muchos programas FTP y gestores de archivos ocultan por defecto los archivos y carpetas cuyo nombre empieza por un punto. Activa la visualización de los archivos ocultos antes de subir nada; si no, todas las páginas salvo la de inicio responderán 404. La sintaxis completa se describe en la [documentación de Apache sobre los archivos .htaccess](https://httpd.apache.org/docs/current/howto/htaccess.html).

## La configuración de Nginx

Nginx ignora los `.htaccess`: reproduce estas reglas en el bloque `server` de tu sitio. Es la configuración que da la guía oficial.

```nginx
location ~ ^/(app|data|cache)(/|$) { return 404; }
location ~ /\.(?!well-known/) { return 404; }
location ^~ /media/ {
    location ~* \.(php\d?|phtml|phar|s?html?|svgz?|xml|js)$ { return 404; }
    add_header X-Content-Type-Options nosniff;
    expires 1y;
}
location ~* \.(webp|avif|jpe?g|png|gif|ico|css|js|woff2)$ { expires 1y; add_header Cache-Control "public, immutable"; }
location / { try_files $uri /index.php$is_args$args; }
location = /index.php {
    include fastcgi_params;
    fastcgi_param SCRIPT_FILENAME $document_root/index.php;
    fastcgi_pass unix:/run/php/php-fpm.sock;
}
location ~ \.php$ { return 404; }
```

- Las dos primeras reglas cierran las carpetas internas y los archivos ocultos, salvo `.well-known`.
- El bloque `/media/` rechaza scripts, páginas HTML, SVG y XML, y guarda los archivos en caché durante un año.
- `try_files` envía a `index.php` todo lo que no sea un archivo existente.
- Solo `index.php` pasa a PHP-FPM: adapta `fastcgi_pass` al socket de tu servidor.
- Para que el asistente IA muestre sus respuestas a medida que se generan, añade `fastcgi_buffering off;` en el bloque PHP.

HTTPS, proxy y CDN se tratan en [Nginx, VPS, proxy y CDN](https://eclair.academy/es/rutas/experto/nginx-vps).

## ¿Qué permisos dar a los archivos y carpetas?

- PHP debe poder escribir en `data/`, `cache/` y `media/`. El asistente de instalación comprueba cada una («Carpeta “data” con permisos de escritura») y, si falla, aconseja dar permisos de escritura (755) por FTP.
- Después, Éclair crea sus archivos de datos con permisos 0600 (solo puede leerlos la cuenta que ejecuta PHP), sus subcarpetas de `data/` y de `cache/` con 0700, y las de `media/` con 0755.
- Evita los permisos 777, que dejan escribir a cualquier cuenta del servidor. Si 755 no basta, pregunta a tu proveedor con qué cuenta se ejecuta PHP.

## ¿Qué archivos y carpetas incluir en la copia de seguridad?

| Qué guardar | Por qué | Cómo |
| --- | --- | --- |
| `data/` | Contenidos, ajustes, cuentas, CSS personalizado | Seguridad › **Descargar una copia de seguridad**, o FTP |
| `media/` | Imágenes, iconos, fuente de los títulos | La misma copia ZIP, o FTP |
| `eclair-config.php` | Si has creado uno | FTP |
| Plantillas modificadas en `app/theme/` | Una actualización las sustituye | FTP, antes de cada actualización |
| Carpeta indicada en `ECLAIR_DATA` | Si has movido tus datos | FTP |

La copia de seguridad ZIP no contiene ni las claves de API, ni las conversaciones y conexiones MCP, ni las sesiones. Después de restaurarla en otro servidor, vuelve a pegar tus claves de API y conecta de nuevo Claude o ChatGPT. Para restaurar, sustituye `data/` y `media/` por los de la copia (por FTP) y vacía la caché desde la administración.

![Actualización: se sustituyen app y assets, se conservan data y media](https://eclair.academy/media/2026/11/eclair-academy-update-es.png)
*Lo que una actualización sustituye y lo que conserva*

El procedimiento de actualización completo está en [Seguridad avanzada y mantenimiento](https://eclair.academy/es/rutas/experto/seguridad-avanzada).

## Las direcciones que genera Éclair

| Dirección | Contenido | Cuándo existe |
| --- | --- | --- |
| `/sitemap.xml` | Mapa del sitio con imágenes y versiones de idioma | Siempre; vacío si el sitio está oculto a los buscadores |
| `/robots.txt` | Reglas para los robots, incluidos 30 robots de IA, y enlace al sitemap | Siempre |
| `/llms.txt` | Mapa del sitio para las IA | Opción **Publicar /llms.txt** |
| `/llms-full.txt` | Todo el contenido en Markdown | Opciones `/llms.txt` y `/llms-full.txt` |
| `/feed.xml` | Feed RSS de los 20 últimos artículos, con el texto completo | Blog activado |
| `/products.xml` | Feed de productos para Google Merchant Center | Tienda abierta |
| `/mi-pagina.md`, `/index.md` | Versión Markdown de una página, en `noindex` con su URL canónica | Opción **Versión Markdown de cada página**, salvo en las páginas en `noindex` |
| `/favicon.ico` | Icono de 32 px | En cuanto existe el icono del sitio |
| `/buscar?q=…` | Resultados de la búsqueda, en `noindex` | Opción **Búsqueda en el sitio** |
| `/<clave>.txt` | Prueba de propiedad de IndexNow | IndexNow activado |
| `/_eclair/mcp` | Conector MCP | **Permitir conexiones MCP** |
| `/_eclair/oauth/authorize`, `/token`, `/register` | Autorización OAuth del conector | Misma condición |
| `/.well-known/oauth-protected-resource`, `/.well-known/oauth-authorization-server`, `/.well-known/openid-configuration` | Descubrimiento OAuth | Misma condición |
| `/_eclair/contact` | Recepción del formulario de contacto | Siempre |
| `/_eclair/edit/<id>` | Botón **✏️ Editar** del sitio, que lleva al editor | Personas con la sesión iniciada |
| `/__eclair/ping` | Prueba de la reescritura y verificación de la dirección del sitio | Siempre |

### Las direcciones de los contenidos

| Contenido | Dirección en un sitio en español |
| --- | --- |
| Página | `/mi-pagina`, o `/padre/hija` para una subpágina (4 niveles como máximo) |
| Inicio | `/`; la dirección propia de la página de inicio redirige a `/` |
| Artículo | `/blog/mi-articulo` |
| Páginas siguientes del blog | `/blog/pagina/2` |
| Categoría de artículos | `/blog/mi-categoria` |
| Página de autor | `/blog/autor/nombre-apellido` |
| Catálogo | `/tienda`, y después `/tienda/pagina/2` |
| Categoría de productos, producto | `/tienda/mi-categoria`, `/tienda/mi-producto` |
| Administración | La dirección elegida durante la instalación |

Las palabras de las direcciones siguen el idioma del sitio: `page` en francés y en inglés, `pagina` en español, italiano y portugués, `seite` en alemán; `auteur`, `autor`, `author` o `autore`; `recherche`, `buscar`, `search`, `suche`, `cerca` o `pesquisa`; `boutique`, `tienda`, `shop`, `negozio` o `loja`.

Una sola dirección por contenido: Éclair redirige con una 301 las variantes en mayúsculas, con barra final, con barras dobles o con `index.php`, así como `http` a `https` cuando HTTPS está forzado, y `www` o sin `www` una vez verificada la dirección oficial.

Algunas palabras están reservadas y no pueden usarse como dirección de página: `app`, `data`, `cache`, `assets`, `media`, `index`, `admin`, `_eclair`, `__eclair`, `sitemap`, `robots`, `feed`, `llms`, `llms-full`, `favicon`, `wp-admin`, `wp-login`, además de la dirección de tu administración, la del blog, la palabra de la búsqueda y la dirección de la tienda una vez configurada. El SEO de estas direcciones se explica en [El SEO con Éclair](https://eclair.academy/es/rutas/intermedio/seo).

## Preguntas frecuentes sobre los archivos

### ¿Puedo borrar la carpeta cache?

No borres la carpeta en sí: contiene su propia protección `.htaccess`. Usa **Ajustes › Avanzado › Vaciar la caché**, que solo borra las páginas generadas; se vuelven a crear en la siguiente visita.

### ¿Dónde se guardan mis artículos?

En `data/content/`, un archivo por contenido, con sus 20 últimas versiones en `data/revisions/`. Las imágenes están en `media/`, ordenadas por año y por mes.

### ¿Se puede colocar la carpeta data fuera de la carpeta pública?

Sí, si tu proveedor lo permite: mueve la carpeta `data` e indica su ruta absoluta con `ECLAIR_DATA` en `eclair-config.php`. Añade esta nueva ubicación a tus copias de seguridad.
