thinkphp多应用模式下二级域名绑定需四步协同:一、建好app/admin/等目录并删app/controller;二、设url_domain_deploy=true并用route::domain()注册子域规则;三、在config/route.php中显式route::import()导入各应用路由;四、nginx配置fastcgi_param http_host $http_host并指向public/。

ThinkPHP多应用模式下实现二级域名绑定(如 admin.example.com → admin 应用、api.example.com → api 应用),关键不在“改配置就行”,而在于目录结构、域名识别、路由导入、入口控制四者协同生效。TP6.1+ 已废弃 config/app.php 中的 domain_bind 配置,靠它绑定子域名必然失败。
一、先搭好多应用骨架
没建对目录,后面全白忙。
- 执行
composer require topthink/think-multi-app安装扩展 - 手动删除根目录下的
app/controller(这是单应用标志,不删框架拒绝进入多应用模式) - 运行命令创建应用:
php think build admin和php think build api,生成app/admin/、app/api/目录 - 检查每个子应用目录是否含标准结构:controller/、model/、config/、route.php;模块名必须是合法 PHP 类名(如
admin可,admin-v2不可) - 确认
config/app.php含'auto_multi_app' => true,并设置'app_namespace' => 'app'
二、启用域名识别与子域名路由
仅开启 url_domain_deploy 不够,必须配合显式注册子域名规则。
- 在
config/app.php中设'url_domain_deploy' => true(注意不是APP_SUB_DOMAIN_DEPLOY,那是旧版) - 在
route/app.php(推荐)或app/common/route.php中写:use think\Route; Route::domain('admin', 'admin'); // admin.example.com → app/admin/ Route::domain('api', 'api'); // api.example.com → app/api/ Route::domain('*', 'index'); // 其他域名(含 www、无子域)→ app/index/ - 确保每个子应用的
app/{name}/route.php文件存在且以use think\facade\Route;开头,里面注册本应用的实际路由(如Route::get('login', 'index/login'))
三、必须显式导入子应用路由
TP6 不会自动扫描所有 app/*/route.php,漏掉导入 = 对应应用完全不可访问。
- 在全局路由入口
config/route.php中添加:Route::import('admin', 'admin'); Route::import('api', 'api'); - 第二个参数大小写必须与应用目录名严格一致(
app/admin/对应'admin',不能写'Admin'或'ADMIN') - 新增应用后,务必同步追加
Route::import()行,否则该应用路由不会加载
四、Web 服务器与开发环境准备
PHP 层配置再对,服务器没传对 Host 头也白搭。
- Nginx/Apache 必须将所有请求统一指向
public/目录(不要为每个子域名配不同入口文件) - 确保
fastcgi_param HTTP_HOST $http_host;(Nginx)或对应 Apache 设置已启用,让 PHP 能读取到原始 Host 值 - 本地测试时,在
hosts文件添加:127.0.0.1 admin.test 127.0.0.1 api.test
然后在小皮(PHPStudy)或 Nginx 中将这两个域名 root 指向项目public/目录 - 清空
runtime/下的 cache/ 和 route/ 目录,避免旧缓存干扰
大量免费API接口:立即使用
涵盖生活服务API、金融科技API、企业工商API、等相关的API接口服务。免费API接口可安全、合规地连接上下游,为数据API应用能力赋能!











