
在 laravel 中,无需为每个子域名部署独立应用,只需通过 `route::domain()` 方法即可在同一套代码中按子域名分组定义路由,实现 shop.mycompany.com 和 comment.mycompany.com 等多子域名的统一管理与灵活路由。
Laravel 原生支持基于子域名的路由分组,这使得你完全可以在同一个 Laravel 应用实例中服务多个子域名(如 shop.mycompany.com 和 comment.mycompany.com),而无需重复部署、维护多套应用代码。关键在于正确配置 Web 服务器(如 Nginx/Apache)将所有目标子域名请求统一指向该 Laravel 项目的 public/ 目录,并在应用内通过路由域约束进行逻辑分流。
✅ 正确做法示例(routes/web.php):
// 匹配 comment.mycompany.com 下的所有路由
Route::domain('comment.mycompany.com')->group(function () {
Route::get('/customer', [CommentController::class, 'showForm'])->name('comment.form');
Route::post('/customer/{id}', [CommentController::class, 'store'])->name('comment.store');
});
// 匹配 shop.mycompany.com 下的所有路由
Route::domain('shop.mycompany.com')->group(function () {
Route::get('/item', [ShopController::class, 'showItem'])->name('shop.item');
Route::get('/cart', [ShopController::class, 'viewCart'])->name('shop.cart');
});
// (可选)支持通配符子域名,如 api.mycompany.com、admin.mycompany.com
Route::domain('{sub}.mycompany.com')->group(function () {
Route::get('/health', function (Request $request) {
return response()->json(['subdomain' => $request->route('sub')]);
});
});⚠️ 注意事项:
- DNS 与服务器配置先行:确保 shop.mycompany.com 和 comment.mycompany.com 均已解析到你的服务器 IP,并在 Nginx/Apache 中配置 server_name 或 ServerAlias 支持多域名(推荐统一使用泛域名 *.mycompany.com 或显式列出);
- 避免跨域混淆:各子域名间 Cookie 默认不共享(因 Domain 属性不同),如需共享登录态,请在 config/session.php 中设置 'domain' => '.mycompany.com'(注意开头的点号);
- 环境隔离建议:虽然共用代码库,但可通过中间件、配置键(如 config('app.subdomain'))或请求对象动态识别子域名,实现行为差异化(例如日志前缀、数据库连接切换等);
- HTTPS 证书:务必为所有子域名配置有效的 SSL 证书(推荐使用 Let’s Encrypt 的泛域名证书 *.mycompany.com)。
总结:Laravel 的 Route::domain() 是专为多租户、多子域名场景设计的核心能力。你当前的 shop.mycompany.com 应用完全可以扩展支持 comment.mycompany.com,只需添加对应路由分组、调整服务器配置并注意会话与安全策略——高效、轻量且符合 Laravel 最佳实践。











