You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel-Livewire 多子域名多租户场景下如何自定义全局消息请求URL

Livewire 多租户子域名适配方案

问题场景

如下示例中使用自定义域名配置时,无法让 Livewire 请求自动加上相同的子域名前缀,本例中为 subdomain1:

Route::domain('subdomain1.'.env('APP_DOMAIN', 'localhost'))
         ->middleware(['web',.....])
         ->as('app.')
         ->group(base_path('routes/app.php'));

问题原因

Livewire 默认的请求端点回调为 /livewire/message/{message},仅使用根域名,不会基于请求发起的域名适配,本例中请求是从 subdomain1 发起的,会导致会话存储不一致,本质上二者属于完全不同的会话。
因此子域名下的会话存储和根域名会话存储并不互通。多租户架构的项目需要做这类访问隔离,也需要基于不同子域名封装 Livewire 的使用逻辑。

修复步骤

  • 覆盖 Livewire 默认路由,绑定到子域名路由组
    将Livewire相关的核心接口放在子域名路由规则下即可自动适配请求前缀:
Route::domain('{tenant}.'.env('APP_DOMAIN', 'localhost'))
    ->middleware('web')
    ->group(function () {
        // 覆盖默认消息处理路由
        Route::post('/livewire/message/{name}', '\Livewire\Controllers\HttpConnectionHandler@__invoke')
            ->name('livewire.message');
        // 覆盖文件上传路由
        Route::post('/livewire/upload-file', '\Livewire\Controllers\FileUploadHandler@handle')
            ->name('livewire.upload-file');
        // 覆盖文件预览路由
        Route::get('/livewire/preview-file/{filename}', '\Livewire\Controllers\FilePreviewHandler@handle')
            ->name('livewire.preview-file');
    });
  • 动态配置Livewire资产域名(可选)
    如果子域名下需要单独加载Livewire静态资源,可以在服务提供者中动态设置资产根路径:
// 写入 App\Providers\AppServiceProvider 的 boot 方法
public function boot()
{
    $host = request()->getHost();
    if (str_contains($host, '.' . env('APP_DOMAIN', 'localhost'))) {
        \Livewire\Livewire::setAssetUrl('//' . $host);
    }
}
  • 配置会话跨子域名共享(可选)
    如果需要同根域名下多子域名会话互通,修改 config/session.php 中的domain配置:
'domain' => '.' . env('APP_DOMAIN', 'localhost'),

内容的提问来源于stack exchange,提问作者Suhail Kawsara

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 05:06:03