host(true); // 获取完整域名,不带端口 // 排除后台域名和平台官网域名 $adminDomains = ['admin.xxx.com']; // TODO: 配置后台域名 $platformDomains = ['www.xxx.com', 'xxx.com']; // TODO: 配置平台官网域名 if (in_array($host, $adminDomains) || in_array($host, $platformDomains)) { return $next($request); } // 解析二级域名 $domainParts = explode('.', $host); // 至少需要三级域名(如 sub.domain.com) if (count($domainParts) < 3) { return $next($request); } $subDomain = $domainParts[0]; $mainDomain = implode('.', array_slice($domainParts, 1)); // 查询租户域名绑定记录 $tenantDomain = Db::name('mete_tenant_domain') ->where('full_domain', $host) ->where('status', 1) // 只有已生效的域名才能访问 ->where('delete_time', null) ->find(); if ($tenantDomain) { // 将租户ID写入请求对象,供后续控制器使用 $request->tenantId = $tenantDomain['tid']; // 同时写入header,方便前端获取 $request->header['X-Tenant-Id', $tenantDomain['tid']); } return $next($request); } }