域名路由配置必须写在 routes/web.php 或 routes/api.php 中,不能写在 bootstrap/app.php;后者仅用于注册服务提供者和中间件组,不处理具体路由定义。

Laravel 12 的域名路由配置(如 Route::domain())必须写在 routes/web.php(或 routes/api.php)中,而不是 bootstrap/app.php。
bootstrap/app.php 是应用启动时注册服务提供者、中间件组和全局配置的地方,它不处理具体路由定义。你在这里只能声明中间件组(比如 $middleware->web() 或 $middleware->api()),但不能写任何 Route::get()、Route::domain() 这类路由注册语句。
真正定义子域名路由的位置是:
- ✅
routes/web.php:用于带会话、CSRF 的 Web 页面,支持Route::domain('shop.example.com') - ✅
routes/api.php:用于无状态 API,同样支持Route::domain('api.example.com')
例如,在 routes/web.php 中这样写是合法且推荐的:
Laravel Cloud(cloud.laravel.com)。此技能用于处理所有 Laravel Cloud 请求,包括搜索和读取数据。只要任务涉及 Laravel Cloud,即使用此技能。
// routes/web.php
Route::domain('admin.example.com')->group(function () {
Route::get('/dashboard', [AdminController::class, 'index'])->name('admin.dashboard');
});
Route::domain('{sub}.example.com')->where('sub', 'blog|docs|help')->group(function () {
Route::get('/', [SubdomainController::class, 'show']);
});
⚠️ 注意事项:
- 域名路由只在
Route::domain()分组内生效,不能和prefix()混用导致路径冲突 - DNS 和 Web 服务器(Nginx/Apache)需提前配置泛域名解析(如
*.example.com)并指向 Laravel 入口 -
bootstrap/app.php中若漏掉$middleware->web(),会导致web.php中的路由无法启用 session/CSRF,但不影响Route::domain()语法本身是否能写
所以结论很明确:
写域名路由 → 去 routes/web.php 或 routes/api.php;
配中间件组 → 才去 bootstrap/app.php 的 withMiddleware() 里声明。
不复杂但容易忽略。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!










