多应用模式需在主配置开启app_multi=true,应用配置位于app/{name}/config/app.php,通过app_map映射url与应用名,各应用配置完全隔离且不继承主配置。

多应用模式下 app.php 的配置位置和加载逻辑
ThinkPHP 6+ 的多应用模式默认不启用,必须手动开启;一旦启用,每个应用(如 app1、app2)需有独立的 config/app.php,但这个路径不是直接放在应用目录根下——而是位于 app/{name}/config/app.php,其中 {name} 是应用名。框架启动时,会根据当前请求解析出应用名(通过域名、子目录或路由规则),再加载对应路径下的配置。
关键点在于:主配置 config/app.php(即项目根目录下的)只控制全局行为(如 app_multi 是否开启),它不会被某个具体应用继承覆盖;各应用的 app.php 是完全隔离的,互不影响。
- 必须在主配置中设置
'app_multi' => true,否则框架始终走单应用流程 - 应用名不能含特殊字符或大写字母,推荐纯小写 + 下划线,例如
admin、api_v2 - 若通过子目录识别应用(如
/admin/xxx),需确保app_map或路由规则已正确定义,否则会 fallback 到默认应用
app_map 配置如何映射 URL 到具体应用
app_map 是定义「请求入口」与「应用名」映射关系的核心配置项,位于主配置 config/app.php 中,类型为数组,键是可识别的路径前缀或域名,值是对应的应用目录名。
常见用法有两种:
- 子目录映射:
'admin' => 'admin'表示所有以/admin/开头的请求交由app/admin目录处理 - 域名映射:
'api.example.com' => 'api'表示该域名下的所有请求走app/api,注意域名需带完整 host,且不支持通配符(*.example.com需自行在入口文件中预处理) - 未匹配到任何
app_map条目的请求,将使用default_app配置指定的应用(默认为index)
错误现象:配置了 'admin' => 'admin',但访问 /admin/ 仍进 index 应用——大概率是没开启 app_multi,或入口文件未正确加载多应用支持(检查是否用了 thinkphp/start.php 而非单应用版启动文件)。
应用级配置如何覆盖全局配置且避免冲突
每个应用的 app/{name}/config/ 下可放任意配置文件,如 database.php、cache.php,它们仅对该应用生效。但要注意:这些文件不会自动合并主配置,而是「完全替代」同名配置项。
例如主配置 config/database.php 定义了 MySQL 连接,而 app/api/config/database.php 只写了 'type' => 'sqlite',那 api 应用里其他数据库参数(如 hostname、database)将变成 null 或空字符串,导致连接失败。
- 推荐做法:应用级配置文件应显式写出所有必要字段,不要依赖主配置兜底
- 若需复用部分主配置,可在应用配置中用
array_merge(config('database'), [...])手动合并(放在app/{name}/common.php或服务提供者中) -
app.php中的namespace、middleware、default_controller等必须按应用实际需求重写,不能留空
调试应用识别失败时该查哪些地方
当请求没进预期应用,第一反应不该是改配置,而是确认框架到底“认为”当前请求属于哪个应用。最直接的方式是在公共入口或中间件中打印 app()->getName() 和 Request::instance()->url()。
典型排查路径:
- 检查
app_map键是否与当前请求 URL 的 path 或 host 完全一致(注意末尾斜杠、大小写) - 确认
public/index.php加载的是多应用启动文件:require __DIR__ . '/../vendor/topthink/thinkphp/src/Start.php';(TP6.1+) - 查看
app/{name}/route.php是否存在并被正确加载——如果应用目录下没有route.php,框架可能跳过该应用初始化 - Apache/Nginx 是否重写了 PATH_INFO?多应用依赖
PATH_INFO解析子目录,若被 rewrite 规则清空,app_map将失效
应用映射本质是静态规则匹配,不涉及动态路由解析;一旦识别失败,后续所有应用级配置都无效,这点容易被忽略。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











