Las subidas de imágenes rotas en un sitio de staging en subcarpeta de CloudPanel (por ejemplo, domain.com/staging/) casi siempre se deben a una sola cosa: la configuración predeterminada de Nginx de CloudPanel incluye reglas de reescritura para WordPress Multisitio que eliminan el prefijo /staging/ de las peticiones y buscan tus imágenes nuevas en la carpeta del sitio en producción. La solución es un ajuste rápido en dos reglas de reescritura en el Vhost de tu sitio y tarda unos dos minutos.
¿Por qué se rompen las imágenes recién subidas en un sitio de staging de CloudPanel?
Cuando creas un sitio de staging en una subcarpeta, sus URLs tienen el aspecto de domain.com/staging/. CloudPanel incluye una configuración de Nginx predeterminada con reglas de reescritura pensadas para WordPress Multisitio. Esas reglas interceptan las peticiones a la carpeta /staging/, eliminan el prefijo y resuelven la ruta contra el directorio de tu sitio en producción. Las imágenes recién subidas solo existen en la carpeta de staging, así que Nginx no las encuentra y devuelve un enlace roto o un error 404, aunque la subida en sí haya funcionado.
La causa está únicamente en las reglas de reescritura de Nginx. No hay nada mal en WordPress, en tu biblioteca de medios ni en los archivos subidos.
¿Cómo soluciono las imágenes rotas en CloudPanel y Nginx?
Añade una exclusión a la configuración de Nginx de tu sitio para que las reglas de reescritura de Multisitio omitan tu carpeta de staging. Todo el cambio se realiza en el editor de Vhost de CloudPanel y tarda unos dos minutos.
Paso 1: Abre el editor de Vhost de tu sitio
- Inicia sesión en tu panel de CloudPanel.
- Haz clic en el sitio web en el que fallan las subidas.
- Abre la pestaña Vhost del menú superior.
Paso 2: Sustituye las reglas de reescritura de Multisitio
Desplázate hasta la sección de archivos estáticos. Empieza con una línea como:
location ~* ^.+.(css|js|jpg|jpeg|gif|png...)$
Dentro de ese bloque, elimina estas dos líneas de reescritura predeterminadas:
# WordPress Multisite Subdirectory
rewrite ^/[_0-9a-zA-Z-]+(/wp-.*) $1 break;
rewrite ^/[_0-9a-zA-Z-]+(/.*.php)$ $1 break;Pega en su lugar estas líneas actualizadas:
# WordPress Multisite Subdirectory (Excluding WP Staging)
rewrite ^/(?!staging)[_0-9a-zA-Z-]+(/wp-.*) $1 break;
rewrite ^/(?!staging)[_0-9a-zA-Z-]+(/.*.php)$ $1 break;La anticipación negativa (?!staging) indica a Nginx que aplique la reescritura de Multisitio a todas las carpetas excepto staging, de modo que las peticiones de tus imágenes de staging se resuelvan correctamente.
Paso 3: Guarda y recarga Nginx
Haz clic en el botón Save de la parte inferior derecha. CloudPanel recarga Nginx automáticamente y tus imágenes de staging recién subidas empiezan a funcionar de inmediato.
¿Y si mi carpeta de staging no se llama «staging»?
Si tu sitio de staging está en una carpeta con otro nombre —dev, test o cualquier otro—, cambia la palabra staging en ambas líneas de reescritura para que coincida con el nombre real de tu carpeta. El resto de la regla no cambia.
¿Se sobrescribirá esta solución?
Sí, si haces clic en el botón Reset to Default de la pestaña Vhost. Ese botón restaura la configuración estándar de CloudPanel y elimina la exclusión, así que tendrías que volver a aplicar estas dos líneas después. Las actualizaciones normales de CloudPanel y WordPress no tocan tu Vhost guardado.
Preguntas frecuentes
¿Afecta este cambio a mi sitio en producción?
No. La exclusión (?!staging) solo cambia cómo enruta Nginx las peticiones dentro de la subcarpeta de staging. Las peticiones a tu sitio en producción siguen coincidiendo con la regla de Multisitio original, sin cambios.
¿Por qué solo se rompen las imágenes recién subidas y no las antiguas?
Las reglas predeterminadas envían las peticiones de staging a tu carpeta de producción. Las imágenes que subes después de crear el sitio de staging solo existen en la carpeta de subidas de staging, así que Nginx no las encuentra allí y devuelve un 404.
Uso Apache, no Nginx. ¿Esto se aplica?
No. CloudPanel sirve los sitios con Nginx, así que esta solución es específica de Nginx. La sintaxis de reescritura que se muestra aquí no funciona en un archivo .htaccess de Apache.
¿Tengo que reiniciar algo después de guardar?
No. CloudPanel recarga Nginx por ti cuando haces clic en Save. La solución está activa en cuanto termina la recarga.