白屏主因是 laravel 启动时无法写日志、缓存或编译视图,根源在于 storage 和 bootstrap/cache 目录归属与宝塔实际 php 运行用户(如 www1)不匹配,须递归执行 chown -r 用户:用户 storage/ bootstrap/cache/ 并 chmod -r 755,同时关闭宝塔“防跨站攻击”或正确配置 open_basedir,最后重启 php 并清空 laravel 缓存。

白屏不是代码坏了,是 Laravel 启动卡在第一步——写不了日志、生不成缓存、编译不了视图。根源几乎总是 storage 和 bootstrap/cache 目录权限不匹配宝塔实际 PHP 运行用户。
确认宝塔里 PHP 真正用的是哪个用户
别猜“应该是 www”,新版宝塔常为每个站点单独配 php-fpm 池,用户可能是 www1、php82 甚至自定义名。错一个字母,所有权限操作都白费。
- 进宝塔 → 网站 → 你的站点 → 设置 → PHP 版本 → 右上角「配置文件」
- 查找
user =和group =两行(例如user = www1) - 或直接打开对应配置文件,路径类似:
/www/server/php/82/etc/php-fpm.d/www.conf
一次性把 storage 和 bootstrap/cache 归属和权限全对齐
只改顶层目录、只跑一次 chown,解决不了问题。Laravel 自动创建的子目录(如 storage/framework/views)默认属 root,必须递归处理。
- 进入项目根目录:
cd /www/wwwroot/your-laravel-site - 归属统一设为 PHP 用户:
sudo chown -R www1:www1 storage/ bootstrap/cache/(请把www1替换为你查到的实际用户名) - 目录设为 755(可读、可写、可进入):
sudo chmod -R 755 storage/ bootstrap/cache/ - 特别注意:漏掉
bootstrap/cache/是高频失误,Laravel 启动第一秒就依赖它
绕过 open_basedir 的拦截
即使归属和权限全对,宝塔默认开启的「网站目录防跨站攻击」也会阻止 PHP 访问 storage,导致静默失败、页面空白。
- 进宝塔 → 网站 → 你的站点 → 设置 → PHP 设置 → 禁用函数 → 找到「禁用此选项」并关闭
- 或手动放行路径:在「PHP 设置」→ 「配置修改」中,把
open_basedir值改为:/www/wwwroot/your-laravel-site/:/tmp/:/proc/
验证 + 必做收尾动作
改完不验证,等于没改;不重启,等于没生效。
- 测试写入能力:
echo "test" | sudo -u www1 tee /www/wwwroot/your-laravel-site/storage/test.txt,能成功写入说明归属和权限已通 - 重启 PHP 服务:宝塔 → 软件商店 → PHP → 操作 → 重启
- 清空 Laravel 缓存:
php artisan config:clear && php artisan cache:clear && php artisan view:clear && php artisan route:clear - 临时开调试看真实报错:
APP_DEBUG=true写进.env,刷新页面,解决后务必关掉











