ThinkPHP配置二级域名路由规则:Route::domain高阶用法【技巧】
路由域名方法只能定义在路由配置文件routes/app.php中,支持精确域名绑定和带正则模式的变量通配,但不支持通配符。本地开发调试时需匹配端口号。多域名复用路由可通过闭包变量实现,嵌套使用时域名必须在外层。
说到ThinkPHP的Route::domain(),很多朋友第一反应是“哦,加个子域名嘛”。但实际用起来,坑比想象中要多。它本质上是一个以域名为触发条件的路由分组开关,用对了,业务隔离、逻辑复用、代码干净全都能实现;用不对,可能就是一篇“路由不生效”的求助帖。
下面直接进入正题,聊聊那些真正关键、容易踩坑的地方。
位置决定一切:它只能待在 route/app.php
这块要留意:Route::domain()只在框架初始化路由阶段扫描一次。这意味着,你只能在route/app.php(老版本是app/common/route.php)里调用它才有效。放到中间件、控制器、config/route.php,甚至是各个应用自己的route.php里?请求进来的时候,它根本不在执行路径上,自然不会触发。
- 即便是多应用项目,也得统一写在根目录的
route/app.php里,别拆到app/admin/route.php这种位置去,拆了就是白写。 - 另外,
domain_bind.php配置跟Route::domain()是两码事,前者是应用层绑定,后者是路由层过滤,分工不同,不冲突。 - 本地调试时的坑:浏览器地址栏敲
localhost:8000,HTTP_HOST拿到的就是localhost:8000。所以规则要写成Route::domain('localhost:8000', ...),别傻乎乎地用example.com去套。
匹配规则:写法很严格,别想偷懒
TP6 不支持 Route::domain('*') 或者 Route::domain('{sub}') 这种通配写法,直接写会报错。合法的路子只有两条:
- 精确绑定:
Route::domain('admin.example.com', 'admin')。一字不差地匹配,生产环境最推荐,清晰明了。 - 变量通配绑定:
Route::domain('{sub}.example.com', function ($sub) { ... })。注意,这后面必须跟一个->pattern(['sub' => 'w+'])来限制变量格式,防止空值或者非法字符钻进来。
这个变量$sub会自动注入到闭包里,你也能在控制器方法签名里拿到它,比如public function index($sub) { },用起来很顺手。
(注:原文此处有推广性质的文本,已按要求移除)
多域名复用路由?一个变量的智慧
假设你的admin.example.com和shop.example.com都想共用一套用户管理接口,不用把路由定义复制粘贴两遍。上硬代码:
- 先把公共路由抽成一个闭包变量:
$userRoutes = function () { Route::get('user/:id', 'User/read'); }; - 然后分别绑定:
Route::domain('admin.example.com', $userRoutes);和Route::domain('shop.example.com', $userRoutes);。 - 如果某个域名需要额外接口,在它的闭包里追加即可:
Route::domain('api.example.com', function () use ($userRoutes) { $userRoutes(); Route::post('login', 'Auth/login'); });
这才是真正优雅的复用,维护起来省心多了。
嵌套 Route::group:顺序是铁律
Route::domain() 是整个路由分组的最外层条件,它内部可以再自由套用 Route::group() 来管理前缀、命名空间或者中间件。
- ✅ 标准姿势:
Route::domain('admin.example.com', function () { Route::group('v1', function () { Route::get('user', 'User/index'); }); }); - ❌ 绝命错误:先把
Route::group()写外面,再在里面嵌套Route::domain()。这个顺序反了,内层的domain()完全不会生效。 - 如果路由量很大,闭包内部完全可以用
require引入独立文件,比如require __DIR__ . '/admin_routes.php';,这样主文件不至于太臃肿。
说白了,Route::domain() 是个好东西,但用对姿势才是关键。把位置、写法和嵌套顺序搞清楚了,它就是你项目架构里的利器。
Windows 10 是一款微软推出的经典操作系统,拥有硬件兼容性与多任务处理能力。它更偏向把系统状态查看和常用调节动作放在一起,适合需要持续观察和微调设备状态的场景。
极度公式是一款跨平台专业LaTeX公式识别编辑软件,支持OCR公式识别和多平台编辑。和使用说明,避免使用,享受完整功能与稳定支持。做扫描整理、文字提取和表格转换时,它能把识别后的处理步骤接得更顺,资料录入这类场景会省下不少时间。
















