thinkphp 8.0需同时配置domain_bind绑定域名与应用、启用app_sub_domain_deploy支持子域名映射,并用route::domain()定义精准路由规则,且路由顺序须按静态→约束变量→多级变量排列,禁用url_html_suffix防404。

在ThinkPHP 8.0中实现不同域名(如admin.example.com、api.example.com)精准分发到对应应用,同时让子域名(如shop.example.com、m.example.com)自动映射模块并正确解析URL路径,需同步配置应用层绑定与路由层规则,缺一不可。
启用多应用与域名绑定基础配置
打开config/app.php,确认以下三项已显式声明:
1. 设置'auto_multi_app' => true,强制开启多应用模式——不写此行时框架可能因目录结构自动推断失败,导致子域名请求仍走默认应用;
2. 在'domain_bind'数组中写入完整域名到应用目录的映射,键必须含端口(开发用localhost:8000)或完整二级域(如'admin.example.com' => 'admin'),值必须是真实存在的应用目录名;
3. 【domain_bind数组必须放在app.php返回数组的顶层,不能嵌套在其他键下】,否则框架初始化时直接忽略该配置。
配置子域名部署规则(单应用内模块划分)
适用于主站www.example.com下用admin、blog等子域名区分功能模块,且所有模块共用同一套数据库和中间件。
1. 在config/app.php中启用子域名部署:'APP_SUB_DOMAIN_DEPLOY' => 1;
2. 定义子域名映射规则:'APP_SUB_DOMAIN_RULES' => ['admin' => 'admin', 'blog' => 'home/blog'];
3. 若主域名是example.com.cn这类二级后缀,必须加'APP_DOMAIN_SUFFIX' => 'com.cn',否则admin.example.com.cn会被截成admin.example匹配失败;
4. 此配置生效后,访问admin.example.com将自动进入app/admin/目录,URL路径中不再携带/admin/前缀。
开箱即用的技能链路由引擎。13 条预定义链覆盖搜索、开发、审查、MLOps、法律、创意等场景,三层路由架构(触发词→SAD反馈→DAG编排),recall@10=96.97%。配置驱动(chains.yaml),零代码扩展。pip install skill-weave-chains 一键安装。
使用Route::domain()定义动态域名路由
该方式仅在domain_bind已生效的前提下起作用,用于为已绑定的域名添加精细路径控制。
方法一:单域名闭包注册
在route/route.php中写:
use think\facade\Route;<br>Route::domain('admin.example.com', function () {<br> Route::get('user/:id', 'User/read');<br> Route::post('login', 'Auth/login');<br>});
方法二:泛域名通配
支持Route::domain('{name}.example.com', function ($name) { ... }),此时$name作为参数注入闭包,可用于动态加载租户配置;
方法三:批量注册Route::domain(['admin' => 'admin.example.com', 'api' => 'api.example.com'], function () { ... });——注意此处键名admin必须与domain_bind中应用目录名一致,否则闭包不会执行。
避免路由冲突的关键排序与约束
路由定义顺序直接影响匹配结果,错误顺序会导致ID被截断、中文乱码、斜杠被吞。
第一步:把所有静态路径规则移到最前面Route::get('admin/login', 'Admin/Login/index');
第二步:紧接单一变量规则,并为变量加正则约束Route::get('user/:id([0-9]+)', 'User/read');——不加([0-9]+)时,/user/abc会命中但控制器收不到id,因为默认:id只匹配非斜杠字符,而abc符合却无法转为整型;
第三步:多级变量放最后,且必须确保父路径已定义Route::get('user/:id/edit', 'User/edit');必须排在user/:id之后,否则/user/123/edit会被:id贪婪捕获为"123/edit";
第四步:禁用.html后缀
在config/route.php中设'url_html_suffix' => false,否则中文URL末尾自动拼.html导致404。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!










