Laravel 11 不提供“域名中间件”内置概念,自定义如 CheckDomain 中间件须在 bootstrap/app.php 中通过 $middleware->alias() 注册别名、确保类存在且用 ::class 语法,再于路由调用 middleware('domain'),否则报错。

Laravel 11 并不强制要求在 bootstrap/app.php 中配置“域名中间件”——框架本身没有名为“域名中间件”的内置概念。你看到的所谓“在 bootstrap/app.php 配置域名中间件”,其实是开发者自行实现的基于域名的请求分发或校验逻辑,而 Laravel 11 的新架构只允许中间件相关注册统一收口到 bootstrap/app.php,因此这类自定义逻辑也必须按新规则注册。
换句话说:
不是 Laravel 11 “需要你配域名中间件”,而是如果你写了域名相关的中间件(比如 CheckDomain),就必须按 Laravel 11 的规则,在 bootstrap/app.php 里完成三件事:
- ✅ 声明中间件类本身(确保它存在于
app/Http/Middleware/,命名空间正确) - ✅ 注册为路由中间件别名(用
$middleware->alias(),例如'domain' => \App\Http\Middleware\CheckDomain::class) - ✅ 在路由中显式调用(如
->middleware('domain'))
否则会报错:Undefined middleware [domain]
域名中间件常见用途
- 多租户系统中根据
Host头匹配租户子域名(如tenant1.example.com→ 加载对应数据库配置) - 灰度环境隔离(
staging.example.com自动启用调试中间件) - 白名单域名访问控制(仅允许
admin.example.com访问后台路由)
怎么正确配置(以 CheckDomain 为例)
1. 创建中间件
php artisan make:middleware CheckDomain
编辑 app/Http/Middleware/CheckDomain.php,在 handle() 中检查 $request->getHost()。
2. 在 bootstrap/app.php 中注册别名
Laravel Cloud(cloud.laravel.com)。此技能用于处理所有 Laravel Cloud 请求,包括搜索和读取数据。只要任务涉及 Laravel Cloud,即使用此技能。
->withMiddleware(function (Middleware $middleware) {
$middleware->alias([
'domain' => \App\Http\Middleware\CheckDomain::class,
]);
})
3. 在路由中使用
Route::middleware('domain')->group(function () {
Route::get('/dashboard', [DashboardController::class, 'index']);
});
⚠️ 注意:
- 不要试图在
app/Http/Kernel.php里注册(该文件在 Laravel 11 中已被移除) - 别名键名(如
'domain')不能和内置别名冲突(如auth、web) - 中间件类必须用
::class语法,不能写字符串路径
这样配置后,中间件才能被路由系统识别并执行。本质是 Laravel 11 把所有中间件入口统一了,而不是为“域名”加了特殊支持。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!










