ThinkPHP6.0运行目录必须设为/public,否则将导致autoload失败、配置加载异常、静态资源404、敏感文件泄露及PATH_INFO解析错误;宝塔需下拉选择/public,Nginx root指令随之设为项目/public路径。

因为 ThinkPHP6.0 的架构强制要求所有 HTTP 请求必须经过 public/index.php 统一入口处理,而 Web 服务器的「运行目录」决定了 $document_root 的值——它直接影响 Nginx 能否正确定位入口文件、解析 PATH_INFO、加载自动加载器和静态资源。
运行目录不设为 /public 会直接破坏框架启动链
ThinkPHP6.0 启动时依赖 public/index.php 中定义的关键常量(如 APP_PATH、RUNTIME_PATH)和路径推导逻辑。如果运行目录指向项目根(如 /www/wwwroot/myapp),则:
-
vendor/autoload.php找不到,报Class 'think\App' not found -
config/目录路径错乱,配置无法载入 -
runtime/目录写入失败,缓存、日志、模板编译全部异常 - 浏览器请求
/static/css/app.css会映射到不存在的/static/css/app.css,而非真实的/public/static/css/app.css,导致大量 404
安全隔离必须靠 /public 作为唯一公开入口
项目中 app/、config/、route/、.env 等目录含数据库配置、密钥等敏感信息。若运行目录是项目根,这些路径可能被浏览器直接访问并返回源码,造成严重信息泄露。只有 public/ 是设计为可公开的目录,Nginx 的 location 规则或宝塔的默认防护机制都基于此前提生效。
伪静态规则和 PATH_INFO 传递全依赖这个根路径
Nginx 的 try_files 或 rewrite 规则(如 rewrite ^(.*)$ /public/index.php?s=$1 last;)中的 /public/index.php 是相对于运行目录的路径。运行目录设为 /public 后,/public/index.php 实际对应物理路径 /www/wwwroot/myapp/public/public/index.php ——这显然错了。所以正确做法是:
- 运行目录设为
/public(宝塔下拉选择,不是手动输) - 伪静态规则里写
/index.php?s=$1,因为此时/就代表public/目录 - PATH_INFO 才能被正确提取并传给 PHP,否则报 “URL pathinfo not supported”
宝塔界面操作和底层行为必须一致
宝塔的「运行目录」设置不仅影响 Web 路径映射,还联动修改了 Nginx 配置中的 root 指令。例如设置为 /public 后,生成的配置是:root /www/wwwroot/myapp/public;
这样后续所有 location、fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; 才能准确定位到 public/index.php。如果只改伪静态规则却不改运行目录,$document_root 仍指向项目根,所有路径计算都会偏移。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











