thinkphp目录结构严格遵循约定,改错位置会导致404、白屏或配置泄露;public是唯一web入口,application仅放业务代码且不可直接访问,runtime必须可写并定期清理。

ThinkPHP 的目录结构不是随便排的,改错一个位置,轻则静态资源 404、模板不渲染,重则直接暴露 config/database.php 或白屏无报错。
application 目录不是静态资源存放地,也不能被 Web 直接访问
它只放业务代码:控制器必须在 controller/ 下,类名和文件名要完全一致(如 Index.php → Index 类);视图文件(.html)放在 view/ 里,但不能用浏览器直接打开 application/index/view/index/index.html——它得靠控制器调用 view() 渲染,路径由框架自动解析。
- 把 CSS/JS 图片丢进
application会导致 404,Web 服务器(Nginx/Apache)默认禁止该目录 HTTP 访问 - 模块名不强制叫
index,可建admin、api等子目录,对应独立路由和配置 -
application/config.php只作用于当前应用,多应用模式下各模块可有自己的一套配置
public 是唯一合法 Web 入口,删了或挪动就等于拆掉安全边界
public 是整个应用对外暴露的根目录,public/index.php 是所有请求的起点,执行 think\App::run() 启动生命周期。静态资源必须放 public/static/,URL 路径才对应为 /static/css/app.css。
- 用
php -S localhost:8000本地测试时,必须指定路由器脚本(如router.php),否则 rewrite 规则不生效,路由全部 404 - 如果把
index.php挪到根目录或application下,可能让config/或application/被直接下载,泄露数据库密码 -
public/.htaccess(Apache)或 Nginx 的location /配置,核心就一条:所有请求都重写到index.php
runtime 必须可写,否则首次访问就白屏且无提示
runtime 存缓存、日志、模板编译结果,框架启动时会自动生成 cache/、log/、temp/ 子目录。权限不对,APP_DEBUG=false 下连错误都看不到,只有空白页。
- Linux 部署常见问题:root 解压代码,但
www-data或nginx用户对runtime不可写 - Windows 共享目录挂载到 Linux 时,SELinux 或
noexec/nosuid挂载参数可能导致写入失败 - 开发阶段可临时
chmod -R 777 runtime排查,上线前必须改为755并确保属组正确(如chown -R :www-data runtime)
真正容易被忽略的是 .env 和 runtime/config/ 的耦合:改了 .env 里的 APP_DEBUG 却没清 runtime/config/,框架仍读缓存旧值——这种“改了没生效”的问题,往往卡人半天。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











