登录
首页 >  文章 >  php教程

宝塔部署Laravel注意点:权限与伪静态设置

时间:2026-02-14 20:00:53 380浏览 收藏

在宝塔面板上成功部署 Laravel 项目,关键不在代码本身,而在于三个极易被忽视却直接决定首页能否打开的核心配置:必须将网站根目录精准指向 `public` 子目录并重启 PHP,确保 `storage` 和 `bootstrap/cache` 目录由 `www` 用户拥有且权限安全(推荐 `u+rwX` 而非危险的 `777`),以及严格采用 Laravel 官方 Nginx 伪静态规则(含 `.env` 等敏感文件拦截和正确 `fastcgi_pass` 端口),任何一处疏漏都会导致神秘的 500 或 404 错误——掌握这三步,才能绕过九成部署陷阱,让 Laravel 在宝塔上真正稳定跑起来。

宝塔PHP部署Laravel项目注意啥_目录权限与伪静态设置【教程】

宝塔面板部署 Laravel 项目,最常出问题的不是代码,而是 public 目录没暴露、storagebootstrap/cache 权限不对、伪静态规则漏掉或写错——这三处一错,500 或 404 就直接拦在首页。

public 目录必须设为网站根目录

Laravel 的入口文件 index.phppublic 目录下,宝塔默认把整个 Laravel 项目根目录(含 app/config/)设为网站根目录,这会导致敏感文件被直接访问,且路由无法解析。

  • 在宝塔「网站」→「设置」→「网站目录」中,把「网站根目录」改为项目内 public 子目录的绝对路径,例如 /www/wwwroot/myapp/public
  • 确认「运行目录」留空(不要填 /public,那是旧版 Nginx 配置习惯,宝塔新版不认)
  • 改完立即重启 PHP 服务,否则部分环境变量(如 $_SERVER['DOCUMENT_ROOT'])仍指向旧路径

storage 和 bootstrap/cache 必须可写,但不能 777

storage 用于日志、缓存、session;bootstrap/cache 存编译后的配置和路由缓存。PHP 进程(通常是 www 用户)必须有写权限,但设成 777 会触发宝塔安全警告,且存在风险。

  • 终端进入项目根目录,执行:
    chown -R www:www storage bootstrap/cache
  • 再执行:
    chmod -R u+rwX storage bootstrap/cache
    (注意末尾是大写 X,只给目录加执行权,不给文件加)
  • 检查是否生效:ls -ld storage 应显示 drwxr-xr-x 1 www www 类似结构,且子目录内文件属主为 www
  • 若用宝塔「文件」管理器手动改权限,请务必勾选「递归修改」,否则只改了目录本身,子项仍不可写

伪静态必须用 Laravel 官方 Nginx 规则,不能套用 ThinkPHP 或 WordPress

宝塔内置的「Laravel」伪静态模板多数版本过旧,缺少对 .well-knownrobots.txt 等静态资源的放行,或未禁用对 .env 的访问,极易导致配置泄露。

  • 在「网站」→「设置」→「伪静态」中,清空原有内容,粘贴以下标准规则:
    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }
    location ~ \.php$ {
        try_files $uri =404;
        fastcgi_pass 127.0.0.1:9000; # 根据你实际 PHP 版本端口调整,如 9001、9002
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }
    location ~ /\.(env|htaccess|htpasswd|ini|log|sh|sql|bak|swp)$ {
        deny all;
    }
  • 特别注意:fastcgi_pass 的端口要和你当前启用的 PHP 版本一致(可在「软件商店」→「PHP 管理」里查看监听端口)
  • 保存后点「重载配置」,不要只点「保存」——只有重载才真正生效

env 文件和 APP_KEY 不能漏,且 .env 要禁止 Web 访问

宝塔不会自动帮你生成 .env 或运行 php artisan key:generate,而 .env 若被 Nginx 错误暴露,数据库密码就全亮了。

  • 先确认 .env 文件存在且已配置好数据库、APP_URL、APP_KEY(若无 APP_KEY,SSH 进入项目根目录运行:php artisan key:generate --force
  • 上面伪静态规则里的 location ~ \.(env|...) 段就是干这个的,必须保留;若删了,直接在浏览器访问 https://yoursite/.env 就能下载全部配置
  • 如果项目用了队列或 Horizon,还要确保 supervisor 配置里指定的用户是 www,且工作目录是项目根目录(不是 public

最麻烦的其实是权限和路径的耦合:改了根目录却忘了改 chown 范围,加了伪静态却没重载,或者 APP_KEY 是本地生成的、没同步到服务器——这些地方一漏,错误日志里往往只报模糊的 500 Internal Server Error,得去 /www/wwwlogs/yourdomain.error.log 里翻真实原因。

今天带大家了解了的相关知识,希望对你有所帮助;关于文章的技术知识我们会一点点深入介绍,欢迎大家关注golang学习网公众号,一起学习编程~

资料下载
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>