ThinkPHP目录结构须严格遵循职责分工:public为唯一入口且静态资源须放public/static/下;app目录名及模块名必须全小写;config仅读取一级文件;runtime目录必须可写。

ThinkPHP搭建网站,目录设置不是随便放文件,而是按职责严格分工。搞错位置,轻则404、白屏,重则路由失效、配置不加载。关键不在“怎么改”,而在“哪些不能动、哪些必须对齐”。
public 是唯一入口,静态资源必须放对地方
Web服务器(如Nginx或Apache)只能直接访问 public 目录下的文件。index.php 是整个应用的唯一入口,所有请求都经它转发进来。
- CSS、JS、图片等静态资源,必须放在 public/static/ 下(例如
public/static/css/app.css),浏览器才能正常加载;放错到 app 或 config 里,必然 404。 - .htaccess(Apache)或 Nginx 重写规则,只对该目录生效,不可挪动或删除。
- 不要把 index.php 复制到其他目录,也不建议修改它的逻辑——它是框架启动链的起点。
app 存业务代码,命名空间和目录名必须小写
app 是你写控制器、模型、中间件的地方,也是框架自动映射命名空间 App\ 的来源。这里出错,最常见的是类找不到。
- 模块目录名(如
admin、api)必须全小写,Admin或API会导致路由解析失败或类加载报错。 - 控制器文件要放在对应模块的
controller/子目录下,且文件名与类名完全一致(如app/index/controller/Index.php中定义class Index)。 - 检查
config/app.php中的'default_module' => 'index',确保值与实际存在的模块目录名(全小写)一致。
config 管配置,只读一级文件,别建子目录
config 目录里的 PHP 文件,框架会在启动时自动加载。但它有硬性规则:只识别该目录下的一级文件,不递归扫描子目录。
立即学习“PHP免费学习笔记(深入)”;
-
database.php、view.php、middleware.php这些文件直接放 config 根目录即可,框架会自动合并生效。 - 如果把数据库配置拆成
config/database/mysql.php,框架根本不会读取——它只会找config/database.php。 - 环境变量优先级更高,.env 文件中定义的
APP_DEBUG=true会覆盖 config/app.php 中的同名设置。
runtime 必须可写,否则缓存日志全失效
runtime 是框架自动生成的运行时目录,包含 cache、log、temp、view 四个子目录。部署时若权限不对,表面看能访问,实则功能残缺。
- Web 服务器进程用户(如 www-data、nginx 或 apache)必须对 runtime 目录有读写权限。
- 首次访问时,框架需在此生成路由缓存;若不可写,就会白屏且无错误提示(尤其
APP_DEBUG=false时)。 - 日志写入、模板编译、临时文件存储全部依赖它,不可删除,也不建议手动修改其中内容。



















