Laravel+Inertia本地正常,生产环境硬刷新报500错误求助
Laravel + Inertia 生产环境硬刷新500错误排查方案
1. 先查具体错误日志
- 查看Laravel内置日志:
storage/logs/laravel.log,找到硬刷新触发的错误条目,这是定位问题的核心依据。 - 同时检查Web服务器日志:Nginx日志路径通常是
/var/log/nginx/error.log,Apache是/var/log/apache2/error.log,确认请求是否正常到达Laravel应用。
2. 校验服务器重写规则
Inertia依赖前端路由,硬刷新时需要Web服务器将所有非静态资源请求转发到index.php:
- Nginx配置:在站点配置块中添加或确认规则:
location / { try_files $uri $uri/ /index.php?$query_string; } - Apache配置:确保开启
mod_rewrite模块,且项目根目录的.htaccess包含正确规则:
若Laravel直接部署在根目录,调整规则指向<IfModule mod_rewrite.c> RewriteEngine On RewriteRule ^(.*)$ public/$1 [L] </IfModule>public/index.php。
3. 修复目录权限
Laravel需要对storage和bootstrap/cache目录有读写权限,执行以下命令:
chmod -R 775 storage bootstrap/cache chown -R www-data:www-data storage bootstrap/cache
(www-data为Web服务器默认用户,CentOS系统替换为apache)
4. 检查环境变量配置
- 确认
.env中APP_KEY已生成:未设置则执行php artisan key:generate --force - 验证
APP_URL与生产服务器域名一致 - 检查数据库连接参数(
DB_HOST、DB_DATABASE等)是否正确,硬刷新时后端渲染会调用ProjectRepository::getList,数据库配置错误会直接触发500。
5. 确认前端资源编译状态
- 必须在生产环境执行前端编译:
npm run build(或yarn build),Inertia依赖编译后的静态资源完成渲染。 - 检查
vite.config.js或webpack.mix.js中的资源路径配置,确保生产环境资源URL正确。
6. 排查业务代码问题
根据日志错误信息,重点检查ProjectRepository::getList方法:
- 是否存在生产环境数据异常(如本地有数据、生产环境为空导致数组索引错误)
- 是否使用了本地环境存在但生产环境未安装的PHP扩展或依赖
内容的提问来源于stack exchange,提问作者Bharat Manchanda
相关产品推荐
相关产品推荐

