上传Laravel8项目到无public_html的服务器后出现HTTP ERROR 500如何解决
Laravel 8 部署后HTTP 500错误排查解决步骤
- 统一修正入口文件路径
你当前仅修改了自动加载和应用初始化文件的路径,维护模式检测路径仍为旧配置,需根据你的实际目录层级统一调整所有相对路径。
若你的Laravel核心文件(vendor、bootstrap、storage、app等文件夹)存放在index.php所在目录的上两层,需将维护模式判断代码修改为:
if (file_exists(__DIR__.'/../../storage/framework/maintenance.php')) { require __DIR__.'/../../storage/framework/maintenance.php'; }
若核心文件存放在index.php所在目录的上一层,需将所有路径的../../改为../,层级需完全匹配实际文件存放位置,任意路径错误都会触发500报错。
- 配置目录权限
Laravel运行需要storage和bootstrap/cache目录的读写权限,在服务器对应目录下执行以下命令配置权限(将www替换为你服务器实际的Web运行用户,如apache、nginx):
chmod -R 755 storage chmod -R 755 bootstrap/cache chown -R www:www storage bootstrap/cache
- 校验环境配置
确认项目根目录存在.env文件,不存在则复制.env.example重命名为.env,执行命令生成应用密钥:
php artisan key:generate
同时检查.env内的数据库连接、缓存驱动等配置是否和服务器环境匹配。
- 安装项目依赖
确认项目根目录存在vendor文件夹,不存在则在项目根目录执行命令安装生产环境依赖:
composer install --optimize-autoloader --no-dev
查看具体错误信息
临时将.env内的APP_DEBUG设为true、APP_ENV设为local,再次访问页面会输出具体错误信息。如果仍无报错,可直接查看日志定位问题:Laravel日志路径为storage/logs/laravel.log,Web服务器日志可查看Nginx的error.log或Apache的error_log。校验重写规则
如果使用Apache服务器,确认入口文件所在目录的.htaccess内容为官方默认配置,且已开启mod_rewrite模块、站点配置中AllowOverride设为All:
<IfModule mod_rewrite.c> <IfModule mod_negotiation.c> Options -MultiViews -Indexes </IfModule> RewriteEngine On # Handle Authorization Header RewriteCond %{HTTP:Authorization} . RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}] # Redirect Trailing Slashes If Not A Folder... RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_URI} (.+)/$ RewriteRule ^ %1 [L,R=301] # Send Requests To Front Controller... RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^ index.php [L] </IfModule>
如果使用Nginx服务器,确认站点配置中root指向入口文件所在目录,且重写规则配置如下:
try_files $uri $uri/ /index.php?$query_string;
内容的提问来源于stack exchange,提问作者ALAA ELDIN
相关产品推荐
相关产品推荐

