Laravel 5.8 routesをサブドメインで分ける

Laravel

Laravelのプロジェクトを作成するとroutesディレクトリにweb.phpとapi.phpが分かれています。

これは RouteServiceProvider.php内で定義されています。

    public function map()
    {
        $this->mapApiRoutes();

        $this->mapWebRoutes();

        //
    }

    protected function mapWebRoutes()
    {
        Route::middleware('web')
             ->namespace($this->namespace)
             ->group(base_path('routes/web.php'));
    }

    protected function mapApiRoutes()
    {
        Route::prefix('api')
             ->middleware('api')
             ->namespace($this->namespace)
             ->group(base_path('routes/api.php'));
    }

mapApiRoutesでprefix(‘api’)と指定しているので、http://example.com/api/以下はapiのルーティングが適用されるようになっています。

今回はサブドメインで切り替えたいので、Route::domainを使用します

    protected function mapApiRoutes()
    {
        Route::domain('api.example.com')
            ->middleware('api')
            ->namespace($this->namespace)
            ->group(base_path('routes/api.php'));
    }

routes/api.phpでテスト用に追加して確認をしてみます。

Route::get('/test', function(){
    echo "api";
});

https://api.example.com/testで”api”と返ってくれば成功です。

その他:ユーザーごとにサブドメインを分ける

ユーザーごとにサブドメインを分けている場合

https://[userId].example.com/のような場合は以下のようにします。

    public function map()
    {
        $this->mapApiRoutes();

        $this->mapWebRoutes();

        $this->mapUserRoutes();    // 追加
    }

    // 追加
    protected function mapUserRoutes()
    {
        Route::domain('{user}.'.config('const.app_domain'))
            ->middleware('web')
            ->namespace($this->namespace)
            ->group(base_path('routes/user.php'));
    }
Route::get('/test', function($user){
    return $user;
});

https://123.example.comで”123”と表示したら成功です。

コメント