Laravel 多子域名路由配置指南:单应用支持多个子域名

1次阅读

Laravel 多子域名路由配置指南:单应用支持多个子域名

laravel 中,无需为每个子域名部署独立应用,可通过 `route::domain()` 方法在单一 laravel 实例中按子域名分组定义路由,实现 shop.mycompany.com 与 comment.mycompany.com 等多子域名共用同一套代码库。

Laravel 原生支持基于子域名的路由分组,这使得你完全可以在同一个 Laravel 应用中优雅地服务多个子域名(如 shop.mycompany.com 和 comment.mycompany.com),而无需重复部署、维护多套应用。关键在于利用 Route::domain() 方法对路由进行作用域隔离。

✅ 正确做法如下:

在 routes/web.php(或 routes/api.php)中按需定义子域名路由组:

// 处理 shop.mycompany.com 及其变体(如 us.shop.mycompany.com) Route::domain('{sub}.mycompany.com')->group(function () {     Route::get('/item', [ShopController::class, 'showItem'])->where('sub', 'shop|us|eu'); // 限制合法子域名 });  // 专用于 comment.mycompany.com 的路由 Route::domain('comment.mycompany.com')->group(function () {     Route::get('/customer', [CommentController::class, 'showForm']);     Route::post('/customer/{id}', [CommentController::class, 'store']); });

⚠️ 注意事项:

  • dns 与 Web 服务器配置必须先行:确保 shop.mycompany.com 和 comment.mycompany.com 均已解析到你的服务器 IP,并在 nginx/apache 中配置为指向同一 Laravel 项目根目录(即 public/)。例如 Nginx 需使用 server_name *.mycompany.com; 或显式列出所有子域名。
  • {sub} 参数需配合 where() 约束:避免通配符匹配意外子域名(如 hacker.mycompany.com),提升安全性。
  • 中间件与配置可差异化:每个 domain 组内可单独应用中间件(如 auth:api)、命名空间或前缀,实现逻辑隔离。
  • 环境与缓存:修改路由后请运行 php artisan route:clear,生产环境建议配合 php artisan config:cache 确保一致性。

? 进阶提示:若未来需共享用户会话或跨子域名认证,可配置 session_DOMAIN=.mycompany.com(注意开头的点号),使 cookie 在所有子域名下有效;同时确保 app_URL 设置为 https://mycompany.com(主域)以保障 URL 生成正确。

综上,你当前的 shop.mycompany.com 应用完全可扩展支持 comment.mycompany.com —— 这不仅是可行的,更是 Laravel 推荐的轻量、可维护的多租户/多站点实践方式。

text=ZqhQzanResources