Laravel 8部署至LIFE服务器后出现未知500 Internal Server Error求解决方案
可行排查方案
- 临时开启Laravel调试模式定位错误:修改项目根目录
.env文件,将APP_DEBUG的值改为true、APP_ENV改为local,再次访问报错地址即可看到Laravel抛出的具体错误栈。确认问题后务必将APP_DEBUG改回false,避免泄露服务器敏感信息。 - 验证PHP环境兼容性:Laravel 8要求PHP版本≥7.3,且必须安装BCMath、Ctype、Fileinfo、JSON、Mbstring、OpenSSL、PDO、Tokenizer、XML扩展。你可以在
public目录下临时创建phpinfo.php文件,写入代码<?php phpinfo(); ?>,访问该文件查看当前环境的PHP版本和扩展安装情况,排查完成后及时删除该文件。 - 核对
.env配置文件:首先确认项目根目录存在.env文件,部署时很多开发者会遗漏上传该文件;其次检查文件内的APP_URL、数据库连接、第三方服务配置是否和服务器环境匹配,本地环境的配置直接拿到线上大概率会出错。 - 清除旧的配置缓存:你之前执行过
config:cache等缓存生成命令,若后续修改过配置却没有重新生成缓存,Laravel会一直读取旧的缓存配置导致报错。你可以先执行以下命令清空所有缓存,暂时不生成缓存先测试访问:
php artisan config:clear php artisan route:clear php artisan view:clear php artisan cache:clear
确认访问正常后,再执行*:cache系列命令开启缓存优化。
- 排查
.htaccess规则问题:确认你当前的.htaccess文件是放在public目录下,若你服务器的域名绑定的是项目根目录而非public目录,需要将public下的.htaccess复制到项目根目录,并重写规则指向public/index.php。另外可以联系主机商确认Apache的mod_rewrite模块是否开启,共享主机经常默认关闭该模块导致重写规则失效。 - 查看Laravel自身运行日志:你不需要服务器权限就能查看Laravel的应用日志,日志文件存放在
storage/logs/laravel.log,通过FTP或主机文件管理器下载该文件即可看到应用层面的具体报错信息,是定位问题优先级最高的依据。 - 核对文件所有者权限:即便你已经设置了目录权限,若项目文件的所有者和Web服务运行用户不一致,依然会出现权限不足报错。可以联系主机商确认Web进程的运行用户,将整个项目的文件所有者修改为对应用户即可。
内容的提问来源于stack exchange,提问作者Marcello Perri
相关产品推荐
相关产品推荐

