Instalar KingCMS X1 con el panel Baota es, en la mayoría de los pasos, igual que instalar un sitio normal; pero el panel tiene varios ajustes predeterminados que pueden romper X1 directamente, y además con síntomas engañosos: la página de inicio abre, el panel de administración es accesible, pero los estilos del frontend se ven en blanco. A continuación se enumeran en el orden de «lo más fácil de pisar al terminar la instalación».

1. Directorio de ejecución y protección anti-cross-site
En el directorio del sitio, pon la raíz del sitio; selecciona public como directorio de ejecución, no la raíz del sitio ni x1/. Además, Baota activa por defecto la «protección contra ataques cross-site», que escribe .user.ini en la raíz del sitio y limita las rutas a las que PHP puede acceder a public/; sin embargo, la base de datos de X1, app.key y los archivos subidos están en data/, bajo la raíz del sitio, y al quedar restringidos se producen errores de directorio no escribible, SQLite no se puede abrir y las imágenes dan 404.
Hay dos soluciones: desactivar la protección anti-cross-site; o ampliar open_basedir hasta la raíz del sitio. Después de cambiarlo, reinicia PHP-FPM. Luego confirma que data/ y public/img/ pertenecen al usuario web (en Baota normalmente www).
2. PHP 8.4 y extensiones
X1 requiere como mínimo PHP 8.4 y no admite versiones inferiores. Instala 8.4 desde «Tienda de software» del panel y confirma que existen estas extensiones: pdo_sqlite, sqlite3, sodium, mbstring, intl, gd, curl, zip. Si falta sodium, no se podrán guardar los ajustes cifrados; si falta gd, fallarán las miniaturas. Después de instalar las extensiones, recuerda reiniciar PHP-FPM.
3. Las dos reglas regex de caché por sufijo (lo más común)
Cuando Baota crea un sitio nuevo, añade dos regex al final del vhost que tratan .css, .js y los sufijos de imagen directamente como archivos estáticos. El problema es que X1 tiene dos tipos de recursos que PHP genera dinámicamente y que no existen en disco: los recursos del tema /n/<主题>/theme.css y /favicon.ico. El resultado es que nginx no encuentra el archivo, devuelve 404 y se pierden todos los estilos del frontend.
La solución no es eliminar estas dos reglas, sino restringirlas al directorio estático real /assets/; por ejemplo, cambia location ~ .*\.(js|css)?$ por location ~ ^/assets/.*\.(js|css)$, y a la regla de imágenes añádele también el prefijo ^/assets/. Después de cambiarlo, ejecuta nginx -t y vuelve a recargar.

4. /media/ y límites de subida
Los archivos subidos se guardan en data/uploads/, no en public/, así que hay que configurar en nginx un alias /media/ que apunte allí y prohibir la ejecución de PHP en ese directorio. Además, public/img/ debe ser escribible, ya que la caché de miniaturas se escribe ahí. Los límites de subida deben coincidir en dos lugares: upload_max_filesize y post_max_size de PHP, y client_max_body_size de nginx; se recomienda establecer 20M en todos, de lo contrario fallará la subida de imágenes grandes desde el backend.
5. URLs pseudoestáticas y autocomprobación tras la instalación
Para las URLs pseudoestáticas, es preferible usar la regla de KingCMS en «Sitio web → Configuración → Pseudoestático» del panel, en lugar de escribir todo el vhost a mano; después, en el backend, ve a «Configuración → Información básica → Formato de URL» y selecciona pseudoestático; al guardar se comprobará automáticamente si la reescritura está activa. Por último, ejecuta una autocomprobación:
cd /www/wwwroot/example.com /www/server/php/84/bin/php bin/kingcms check:web
Comprobará elemento por elemento la página de inicio, el CSS del tema, /healthz, /media/, el formato de URL, la capacidad de escritura de los directorios y las extensiones de PHP; en los elementos que fallen, indicará directamente la ubicación de configuración correspondiente.
Resumen
La clave para instalar X1 con Baota son tres cosas: apuntar el directorio de ejecución a public, permitir que PHP acceda a data/ y restringir las dos regex de sufijos a /assets/. El resto se hace con las operaciones habituales del panel; después de instalar, pasar una vez check:web ahorra mucho más trabajo que investigar después de ponerlo en línea.