Error 500 en Laravel en cPanel y Webuzo: causas y solución

Publicado el
Un error 500 en Laravel solo dice que algo falló en el servidor, no qué. En esta guía aprendes a encontrar el mensaje real sin acceso SSH, desde el panel de cPanel o Webuzo, y a resolver las causas que más vemos al publicar un proyecto Laravel en hosting compartido.
Paso 1: Encuentra el mensaje real del error
Con APP_DEBUG=false (lo correcto en producción) el visitante solo ve «Server Error» o una página en blanco. El detalle queda en uno de estos dos archivos, que puedes abrir con el Administrador de archivos de tu panel:
| Qué ves en el navegador | Dónde está el detalle | Qué tipo de fallo es |
|---|---|---|
| Página de Laravel «500 Server Error» | laravel/storage/logs/laravel.log | Laravel arrancó y falló después: base de datos, APP_KEY, permisos |
| Página en blanco con error 500 | El log de PHP de tu cuenta: cPanel: logs/php.error.logWebuzo: tuusuario_php84.error.log (en tu carpeta de inicio) | Laravel ni siquiera pudo arrancar: rutas, vendor, caché de configuración, versión de PHP |
Cannot modify header information - headers already sent. Ese es una consecuencia, no la causa.false. Los logs te dan la misma información sin exponerla.Causas del error 500 y cómo resolverlas
1. La versión de PHP del hosting no es la del proyecto
Dónde aparece: log de PHP. Mensaje:
Composer detected issues in your platform: Your Composer dependencies require a PHP version ">= 8.4.1". You are running 8.2.35.
Causa: preparaste el proyecto en tu computadora con una versión de PHP más nueva que la del dominio. En cPanel lo vimos como error 500; en Webuzo, como error 503.
Solución: en MultiPHP Manager (cPanel: «Administrador MultiPHP») elige la misma versión con la que preparaste el proyecto. Para Laravel 13 necesitas PHP 8.3 o superior; consulta la tabla de compatibilidad Laravel y PHP.
2. En cPanel: copiaste el .htaccess de Laravel y se perdió la versión de PHP
Síntoma: todo iba bien y, al subir el .htaccess de Laravel a public_html, aparece el error 500 del caso anterior. Causa: cPanel guarda la versión de PHP del dominio dentro de ese mismo .htaccess; al reemplazarlo, el dominio vuelve a la versión por defecto del servidor. Solución: vuelve a elegir la versión en el Administrador MultiPHP: cPanel añade su bloque al final del .htaccess de Laravel sin estropearlo.
3. Los datos de la base de datos son incorrectos
Dónde aparece: laravel.log. Mensaje:
SQLSTATE[HY000] [1045] Access denied for user 'tuusuario_app'@'localhost' (using password: YES)
Causa: contraseña equivocada o nombre de usuario incompleto. Un descuido frecuente: cPanel y Webuzo anteponen tu usuario al nombre de la base y del usuario (app pasa a ser tuusuario_app). Con el nombre corto el mensaje es el mismo, con 'app'@'localhost'.
Solución: revisa en laravel/.env las líneas DB_DATABASE, DB_USERNAME y DB_PASSWORD con el nombre completo. Si no recuerdas la contraseña, cámbiala desde el panel (cPanel: Manage My Databases; Webuzo: Bases de datos) y cópiala de nuevo en el .env.
4. Falta la APP_KEY o no se subió el archivo .env
Dónde aparece: laravel.log. Mensaje:
No application encryption key has been specified.
Causa: la línea APP_KEY está vacía o el archivo .env no llegó al servidor (es un archivo oculto y muchos programas de compresión lo omiten). En nuestras pruebas, ambos casos dieron exactamente este mensaje.
Solución: en el Administrador de archivos activa Mostrar archivos ocultos y comprueba que existe laravel/.env. Si falta la clave, genérala en tu computadora y pégala en el .env del servidor:
php artisan key:generate --show
Si tu aplicación ya tenía usuarios, usa la misma clave que antes: con una clave nueva se pierden las sesiones y los datos cifrados con la anterior.
5. La carpeta storage no tiene permiso de escritura
Dónde aparece: laravel.log. Mensaje:
tempnam(): file created in the system's temporary directory
Causa: Laravel necesita escribir en storage y bootstrap/cache, como indica su documentación de despliegue. Al cambiar permisos a mano (por ejemplo, a 555) deja de poder compilar las vistas.
Solución: con la opción Permisos del Administrador de archivos pon 755 en las carpetas de storage y bootstrap/cache. No uses 777: en nuestros servidores PHP se ejecuta con tu propio usuario, así que 755 basta, y 777 permite que otros escriban en tus archivos.
6. Falta la carpeta vendor o está incompleta
Dónde aparece: log de PHP (página en blanco). Mensaje:
PHP Fatal error: Uncaught Error: Failed opening required '/home/tuusuario/public_html/../laravel/vendor/autoload.php'
Causa: en un hosting sin terminal no se puede ejecutar composer install, así que vendor debe subirse desde tu computadora, y a veces la subida queda a medias.
Solución: en tu computadora ejecuta composer install --no-dev --optimize-autoloader, comprime de nuevo el proyecto y vuelve a subirlo. Te lo explicamos en cómo subir Laravel a cPanel y Webuzo.
7. Subiste la caché de configuración de tu computadora
Dónde aparece: log de PHP (página en blanco). Mensaje (con las rutas de tu computadora):
PHP Fatal error: Uncaught UnexpectedValueException: There is no existing directory at "/Users/miusuario/proyectos/mi-app/storage/logs" and it could not be created: Permission denied
Causa: ejecutaste php artisan config:cache (u optimize) en tu computadora y subiste el archivo bootstrap/cache/config.php, que guarda las rutas de tu máquina. La documentación de Laravel recomienda no ejecutar ese comando durante el desarrollo local.
Solución: con el Administrador de archivos borra laravel/bootstrap/cache/config.php (y, si existen, los archivos routes-*.php y events.php de esa carpeta). No borres packages.php ni services.php.
8. Una ruta mal escrita en public_html/index.php
Dónde aparece: log de PHP (página en blanco). Mensaje: el mismo Failed opening required del caso 6, pero con la ruta mal escrita (por ejemplo, /../laravell/vendor/autoload.php).
Solución: abre public_html/index.php y comprueba que las tres rutas apunten a la carpeta real del proyecto (/../laravel/ si lo subiste a /home/tuusuario/laravel).
public_html/.htaccess que envía las rutas a Laravel. Actívalo con Mostrar archivos ocultos y cópialo desde laravel/public.Lo corregí y sigue el error: espera un minuto
Los servidores guardan en memoria el código PHP ya cargado (OPcache) para ir más rápido. En nuestras pruebas, Webuzo detectó los cambios en archivos .php en unos 2 segundos y cPanel tardó hasta 60 segundos. Si acabas de corregir un archivo, espera un minuto antes de dar por fallida la solución. Los cambios en el .env se aplican de inmediato, siempre que no haya caché de configuración (causa 7).
Lista de comprobación rápida
- ¿La versión de PHP del dominio es la misma con la que preparaste el proyecto?
- ¿Existen
laravel/.envylaravel/vendor/autoload.php? - ¿
APP_KEYtiene valor yAPP_DEBUG=false? - ¿Los datos de la base de datos llevan el prefijo
tuusuario_? - ¿
storageybootstrap/cachetienen permisos 755? - ¿Hay un
config.phpenlaravel/bootstrap/cacheque no generaste en el servidor? - ¿Las rutas de
public_html/index.phpapuntan a/../laravel/?
Hosting con varias versiones de PHP por dominio y soporte en español que revisa contigo los logs.
Preguntas frecuentes
vendor o hay una ruta mal escrita en index.php), así que Laravel no pudo mostrar su página de error. El detalle está en el log de PHP de tu cuenta.logs/php.error.log dentro de tu carpeta de inicio, y en Webuzo en tuusuario_php84.error.log (el número cambia según tu versión de PHP), también en tu carpeta de inicio. Ábrelos con el Administrador de archivos.php artisan, como generar la clave, se hace en tu computadora.laravel.log y el log de PHP, que tienen la misma información sin exponerla.Fuentes
- Laravel 13: configuración, caché de configuración y modo depuración
- Laravel 13: despliegue y permisos de carpetas
- Laravel 13: registro de errores (logging)
Pruebas realizadas el 26 de octubre de 2026 en servidores de hosting.com.pe.
¿Necesitas hosting rápido y con soporte en español?
Hosting optimizado, SSL gratis y soporte técnico 24/7 desde Perú.
