必须将网站根目录设为public子目录,因为laravel是单入口框架,所有请求须经public/index.php统一处理;若设为项目根目录,.env等敏感文件将直接暴露,导致安全风险、路由失效和静态资源404。

Linux服务器安装Laravel后,必须把网站根目录指向 public 子目录,不能是项目根目录(如 /var/www/myapp),否则会暴露敏感文件(如 .env)、导致路由失效、静态资源 404,甚至引发安全风险。
为什么必须设为 public 目录
Laravel 是单入口框架,所有 HTTP 请求都经由 public/index.php 统一处理。该文件负责加载框架、读取配置、分发路由。若根目录设在项目顶层,app/、config/、.env 等目录将直接可被 Web 访问,造成严重安全隐患。
Nginx 配置中修改 root 指令
编辑站点对应的 Nginx 配置文件(通常在 /etc/nginx/sites-available/ 或宝塔的站点设置页):
Linux系统管理专家,覆盖12大模块:用户权限、SSH、存储、网络、systemd、防火墙、日志监控、备份恢复、TLS证书、Ansible、容器、IaC。提供配置、验证、加固、监控、备份、自动化、故障排查、回滚闭环。关键词:useradd、sudo、sshd_config、chmod、SEL...
- 找到
server块中的root行 - 将其改为指向
public子目录,例如:root /var/www/myapp/public; - 确保
index包含index.php:index index.php index.html index.htm; - 确认
location ~ \.php$块中fastcgi_param SCRIPT_FILENAME正确拼接路径,推荐写法:fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name; - 保存后执行
sudo nginx -t && sudo systemctl reload nginx生效
宝塔面板操作步骤
登录宝塔 → 网站 → 选择你的站点 → 点击「设置」→ 左侧选「网站目录」→ 右侧「根目录」旁点「修改」:
- 原路径如
/www/wwwroot/myapp,需改为/www/wwwroot/myapp/public - 同时关闭「防跨站攻击(open_basedir)」选项(否则会拦截 Laravel 的自动路径解析)
- 清空「运行目录」和「open_basedir 设置」输入框(留空)
- 在
public目录下手动创建或保留.user.ini文件,内容为:open_basedir=/www/wwwroot/myapp/:/tmp/:/proc/(仅限需要限制时,多数情况建议留空) - 保存后重启 PHP 服务
验证是否生效
部署完成后立即验证两件事:
- 访问网站首页,应正常显示 Laravel 欢迎页或你配置的首页
- 尝试直接请求敏感路径,如
http://your-domain/.env,应返回 404 或 403,**绝不能看到文件内容** - 在终端进入项目根目录,运行:
php -r "echo file_get_contents('public/index.php') ? 'public 可读' : '权限异常';"










