前提
Laravel 9.x
Laravel Sail
Laravel Jetstream設定済み
やりたいこと
Laravelのサブドメインルーティングが効かない。
admin.example.comに管理者用、example.comで通常用。それぞれでJetstreamを利用したい。
web.php
# 一番上に記載
Route::domain('admin.example.com')->group(function () {
Route::get('/login', function () {
dd('admin login page');
});
});
このときadmin.example.com/login
にアクセスしたときに、jetstreamのloginページが表示されてしまう。
原因
Readoubleにある通り、サブドメインなしのドメインルートを登録する前にサブドメインルートを登録しておく必要があるのですが、Jetstream(というかFortify)内のrouteでやっているため
Note: ルーティングがサブドメインルートに到達できるようにするには、サブドメインなしのドメインルートを登録する前にサブドメインルートを登録しておく必要があります。これにより、サブドメインなしのドメインルートが同じURIパスを持つサブドメインルートを上書きするのを防げます。
直し方
それぞれルーティング無効化して、自身でインポートする
# fortifyのroute
# vendor/laravel/fortify/routes/routes.phpからコピーする
cp ./vendor/laravel/fortify/routes/routes.php ./routes/fortify.php
FortifyServiceProvider.php
public function register(): void
{
Fortify::ignoreRoutes(); # 追加
}
# jetstreamのroute
php artisan vendor:publish --tag=jetstream-routes
JetstreamServiceProvider.php
public function register(): void
{
Jetstream::ignoreRoutes(); # 追加
}
既存のrouteにインポート
web.php
<?php
Route::domain('admin.example.com')->group(function () {
Route::get('/login', function () {
dd('admin login page');
});
});
# ~ 省略 ~
require __DIR__.'/fortify.php';
require __DIR__.'/jetstream.php';
これでサブドメインが機能するようになりました。