El síntoma
Tu web Joomla muestra un error 500 en la parte pública (por ejemplo "Whoops, looks like something went wrong"), pero al panel de administración (backend) sí puedes entrar. La portada y los formularios aparecen en blanco.
Si activas la depuración o revisas el error_log, aparecen líneas como estas:
Compile Error: Cannot redeclare posturl() (previously declared in /home/.../public_html/libraries/tmp:NN)
Warning: include(libraries/tmp): Failed to open stream: No such file or directory en libraries/src/Document/HtmlDocument.php
También puede que una copia de seguridad falle al no poder leer carpetas con nombres extraños (por ejemplo carpetas de idioma con nombres aleatorios).
Lo que normalmente NO es la causa
Ante un error 500, la primera reacción suele ser revisar estos puntos. En este caso concreto ninguno de ellos es el problema:
La versión de PHP: el error no se resuelve subiendo ni bajando la versión de PHP. Con una versión moderna y soportada (por ejemplo PHP 8.3) el fallo persiste.
Los permisos de archivos: aunque conviene que no superen 755, no son la causa de este 500.
Archivos personalizados tipo php.ini, .user.ini o reglas extra en .htaccess: si no existen, no hay nada que "quitar".
Un plugin recién actualizado: aunque acabes de actualizar extensiones, el problema no está en ellas.
Lo que está pasando realmente
El mensaje "Cannot redeclare ...()" significa que una misma función se está declarando dos veces y PHP no lo permite. La causa es una inyección de código malicioso en ficheros del núcleo (core) de Joomla.
Lo más habitual es encontrar código insertado en un fichero legítimo del core (por ejemplo libraries/src/Document/HtmlDocument.php) que incluye dos veces un fichero falso colocado por el atacante (por ejemplo un archivo llamado libraries/tmp o una carpeta /th/). Ese fichero contiene código de cloaking / SEO spam que llama a dominios externos sospechosos. Al cargarse dos veces, se redeclara la función y se produce el error fatal 500.
Señales de que tu web está infectada
Ficheros o carpetas con nombres que no corresponden a Joomla (por ejemplo un fichero llamado libraries/tmp, una carpeta /th/, carpetas con nombres aleatorios).
Llamadas a dominios externos desconocidos dentro del código.
Resultados de spam, redirecciones raras o contenido que no es tuyo al buscar tu web en Google.
Errores de "redeclare" o includes de rutas que no deberían existir.
Cómo se soluciona
No bajes la versión de PHP ni cambies permisos a ciegas: no es eso.
Avisa a soporte de Tropical Server para que revise el core de Joomla en busca de código inyectado. Desde el servidor podemos localizar las líneas maliciosas y los ficheros falsos.
Se eliminan las líneas inyectadas del fichero del core y se retiran los ficheros falsos (por ejemplo libraries/tmp y /th/), dejándolos en una carpeta de cuarentena por si hay que analizarlos.
Si la infección es extensa, lo más seguro es restaurar desde una copia de seguridad limpia anterior a la infección (con JetBackup) y volver a aplicar después solo los cambios legítimos.
Cambia todas las contraseñas: administrador de Joomla, FTP, base de datos y cPanel. El atacante pudo entrar con credenciales comprometidas.
Actualiza Joomla y todas las extensiones a la última versión y elimina las extensiones obsoletas o sin soporte, que son la principal puerta de entrada.
Cómo prevenirlo
Mantén Joomla y todas sus extensiones siempre actualizados.
Usa contraseñas fuertes y únicas y limita los usuarios administradores.
Desinstala extensiones que ya no uses o que no reciban actualizaciones.
Asegúrate de tener copias de seguridad periódicas (JetBackup) para poder volver a un estado limpio si vuelve a ocurrir.
