laravel部署必须将网站根目录设为public子目录,关闭宝塔防跨站攻击并清空open_basedir,补充public目录下的.user.ini覆盖继承限制,并确保storage与bootstrap/cache目录权限正确及selinux策略适配。

站点根目录必须设为 public 子目录,不能是项目根目录
宝塔默认把网站根目录指向 Laravel 项目根(含 app/、routes/、vendor/ 等),这会导致所有 PHP 文件可被直接访问,.env 泄露、路由失效、静态资源 404。Laravel 的入口统一在 public/index.php,所以必须手动改根目录。
操作路径:网站 → 你的站点 → 根目录 → 点右侧「修改」→ 把路径从 /www/wwwroot/your-site 改成 /www/wwwroot/your-site/public → 保存。
改完立刻测试:
– 访问域名应能正常显示 Laravel 欢迎页或首页
– 访问 http://your-domain/.env 必须返回 404 或 403(如果还能打开,说明没生效)
关闭「防跨站攻击」不是可选项,而是 Laravel 运行的必要条件
宝塔的「防跨站攻击」功能本质是给每个站点加 open_basedir 限制,强制只能读取指定目录。但 Laravel 的 vendor/ 在上层目录(../vendor),且 storage/、bootstrap/cache/ 也常需跨级写入——开启该选项会导致 Class 'Illuminate\Foundation\Application' not found 或 file_put_contents(): Failed to open stream: Permission denied 等致命错误。
关闭方法:
– 网站 → 你的站点 → 配置文件 → 找到「防跨站攻击」开关 → 关闭
– 或更稳妥:进入「PHP 设置」→「禁用函数」下方找到「open_basedir」→ 清空其值 → 保存并重启 PHP
注意:
– 不要只关面板开关却不清空 open_basedir 值,有些版本会残留配置
– 关闭后务必检查 PHP 错误日志(/www/wwwlogs/your-site.error.log)是否还有 open_basedir 相关报错
public 目录内还需补一个 .user.ini 来覆盖父级遗留限制
即使关闭了防跨站,宝塔有时会在父目录(如项目根)自动生成 .user.ini,内容含 open_basedir=/www/wwwroot/your-site/:/tmp/:/proc/。这个文件会被子目录继承,导致 public/ 下的 PHP 仍受限制。
解决办法:
– 进入 /www/wwwroot/your-site/public/
– 创建或编辑 .user.ini
– 写入:
open_basedir=/www/wwwroot/your-site/:/tmp/:/proc/:/dev/
(注意包含项目根路径,而非仅
public 路径)– 保存后执行
kill -USR2 $(cat /www/server/php/80/var/run/php-fpm.pid) 重载 PHP 配置(路径按你实际 PHP 版本调整)
权限与 SELinux / systemd 安全模块可能静默拦截写入
Laravel 的 storage/ 和 bootstrap/cache/ 需要 Web 用户(通常是 www)有写权限,但宝塔默认不自动递归授权。同时,部分 CentOS 服务器启用了 SELinux,会阻止 Nginx 写入非标准上下文路径。
快速验证和修复:
– 运行 ls -ld /www/wwwroot/your-site/storage,确认属主是 www:www;如果不是,执行:
chown -R www:www /www/wwwroot/your-site/storage /www/wwwroot/your-site/bootstrap/cache
– 若仍报写入失败,临时检查 SELinux:
sestatus;若为 enforcing,临时放行:setsebool -P httpd_can_network_connect 1 && setsebool -P httpd_read_user_content 1
– 生产环境不建议永久关闭 SELinux,应改用
semanage fcontext 添加正确上下文
改完别急着上线,先跑一次 php artisan config:clear 和 php artisan cache:clear,再看日志里有没有 open_basedir 或 permission denied。很多问题不是配置没点对,而是旧缓存或残留 ini 文件还在起作用。










