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”と表示したら成功です。