thinkphp项目在宝塔部署后访问异常的核心问题在于入口路径、伪静态规则、runtime权限及php-fpm与nginx转发匹配:①运行目录必须设为/public并重启站点;②伪静态需含try_files $uri $uri/ /index.php?$query_string;③runtime目录须www用户可写且config/app.php中'record'=>true开启;④fastcgi_pass必须与php-fpm listen地址严格一致。

ThinkPHP 项目在宝塔面板部署后访问异常,核心问题通常不在代码本身,而集中在入口路径、重写规则、权限控制和服务连通性这四个环节。只要按顺序检查,90% 的问题能快速定位。
运行目录必须设为 /public
ThinkPHP 6/8 默认采用 public 入口模式,所有静态资源和 index.php 都放在该目录下。若宝塔站点的“运行目录”仍留空或指向根目录,Nginx 就会直接尝试加载根目录下的 index.php(实际不存在),导致 404 或空白页。
- 进入宝塔 → 网站 → 对应站点 → 设置 → 网站目录 → 运行目录,从下拉菜单中选择 /public(不要手动输入斜杠或拼错)
- 保存后务必点击站点右侧的【重启】按钮,否则配置不生效
- 验证方式:访问 http://你的域名/index.php,能打开说明入口路径正确;若仍 404,重点查伪静态
伪静态规则必须启用且语法完整
ThinkPHP 依赖 URL 重写实现路由访问(如 /user/list)。如果伪静态未生效,除 index.php 外的所有路径都会返回 404。
- 在站点设置中切换到【伪静态】选项卡,从预设模板中选择 ThinkPHP(不是 Laravel 或其他)
- 确认生成的规则里包含关键行:try_files $uri $uri/ /index.php?$query_string;
- Nginx 配置中漏掉 $uri/ 会导致带斜杠的路径(如 /admin/)直接 404,这点极易被忽略
- 保存后必须重启站点,仅重载 Nginx 不够
runtime 目录要可写,且日志开关已开
框架启动时需在 runtime 目录下生成 cache、log、route 等子目录。若权限不足或属主错误,页面可能空白、白屏或报 500,但无明确提示。
- 执行 ls -ld runtime,确认输出含 drwxr-xr-x 或更宽松权限
- 若属主不是 www,运行 chown -R www:www runtime
- 检查 config/app.php 中 'record' => true 是否开启,否则日志不会写入,排查失去依据
- 查看 runtime/log/ 下是否有新生成的日志文件,有则说明权限正常
PHP-FPM 和 Nginx 转发必须严格匹配
出现 502 Bad Gateway 或首页能打开但接口全挂,大概率是 PHP 服务没接上——Nginx 找不到 PHP-FPM 进程。
- 执行 ps aux | grep php-fpm-74(版本号按实际替换),看到 php-fpm: master process 才算真正在跑
- 进站点配置文件,找到 location ~ \.php$ 段,确认 fastcgi_pass 值与 PHP 7.4 的 listen 地址完全一致(例如 unix:/tmp/php-cgi-74.sock)
- 若 Nginx 配置里写的是 127.0.0.1:9000,但 php-fpm.conf 里 listen 是 socket 路径,必然 502
- 改完务必点【保存】→【重载配置】,再测试
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











