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

Laravel8如何实现API与web端同URL不同域名共用路由不覆盖

可以实现同URL路径、不同子域名的路由配置,你的路由失效是两个配置错误导致的,按以下步骤修复即可:

问题根因

  1. 重复文件加载逻辑错误:你在api.php和web.php中都使用了require_once加载auth.php,require_once全局只会加载一次文件,先加载的路由组执行完auth.php注册逻辑后,后加载的路由组会跳过auth.php执行,导致其中一组路由完全没有注册,这是功能失效的直接原因。
  2. 路由名全局唯一冲突:Laravel路由名称是全局唯一索引,就算绑定了不同子域名,后注册的同名路由会直接覆盖先注册的路由,导致先注册的路由无法匹配。

修复方案

第一步:替换加载逻辑

把api.php和web.php中的require_once('auth.php')改成require('auth.php'),保证两套路由组都会执行路由注册逻辑。

第二步:给路由组增加名称前缀避免冲突

在RouteServiceProvider.php中给不同域名的路由组增加独立的名称前缀,不需要修改原有路由的路径定义,也不会影响控制器逻辑:

public function boot()
{
    $this->configureRateLimiting();

    $this->routes(function () {
        Route::domain('api.example.com')
            ->middleware('api')
            ->namespace($this->namespace)
            ->name('api.') // 新增:所有API路由自动加api.名称前缀
            ->group(base_path('routes/api.php'));

        Route::middleware('web')
            ->namespace($this->namespace)
            ->name('web.') // 新增:所有Web路由自动加web.名称前缀
            ->group(base_path('routes/web.php'));
    });
}

修改后两套路由的URL路径完全一致,仅路由名会自动加上前缀,比如原有login路由会变为api.login和web.login,生成链接时按场景调用对应名称即可,Laravel会自动匹配对应子域名。

可选优化:避免硬编码域名

如果需要适配多环境,可把域名写入配置文件,调用时动态读取:

// config/app.php中新增配置
'domain' => env('APP_DOMAIN', 'example.com'),

// RouteServiceProvider中修改为
Route::domain('api.' . config('app.domain'))

内容的提问来源于stack exchange,提问作者Kristjan O.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 18:00:02