やったことなかったけど、一つのLaravelに別ドメインからアクセスしたら別サービスとしてふるまう的な案件があったのでメモ。
実験のためにLaravel Sailでやったので、そこから。
環境
- Windows10 WSL2(Ubuntu) php7.4.3
Laravel + Sail インストール
# Laravelインストール
composer create-project laravel/laravel lara-routing-domain
# Sailインストール
cd lara-routing-domain/
php artisan sail:install
# DBを聞かれて、実験なので何でも良かったけどついクセでmysqlの0を入力してEnter
ここまで公式ドキュメント通り
SailのDockerコンテナ起動
./vendor/bin/sail up
ブラウザに localhost と入力してEnter
激かんたんですね。ホストはphp7.4.3でしたが、Sail内では最新の8.2系で動いてます。ありがた。
# Ctrl+Cで一旦コンテナを停止しとく
ポート番号を変える
記事とは関係ないけど、今回の案件で元々のポート番号が80じゃなかったので、一応近い状態にする。デフォルトだとポート80で待ち受けるように動作しますが、ポート9876に変更します。
# 以下を追加
APP_PORT=9876
# shellの表示がうざいので -d をつけてバックグラウンドで動くように
./vendor/bin/sail up -d
ブラウザに localhost:9876 と入力してEnterすると、さっきの画面が出るはずです。楽チン♪
複数ドメインからアクセス
localhostじゃなくて、別のドメインでアクセスできるようにします。といっても適当につけたいドメイン名が自端末を向くようにhostsを編集するだけです。
Windowsでは管理者権限でメモ帳を開くなりして編集してください
# C:\Windows\System32\drivers\etc\hosts に下記2行を追加
127.0.0.1 local1.com
127.0.0.1 local2.com
ブラウザに local1.com:9876 と入力しても、 local2.com:9876 と入力してもLaraveのページが表示されます。おちゃのこ♪
ルーティングを分ける
あとはLaraelのルーティングを分離するだけです。あらかじめ domain()
が用意されているので、それを使うだけのお仕事です。
// 元はこれ
Route::get('/', function () {
return view('welcome');
});
// こんな感じに変更
Route::domain('local1.com')->group(function () {
Route::get('/', function () {
dd('local1.com');
});
});
Route::domain('local2.com')->group(function () {
Route::get('/', function () {
dd('local2.com');
});
});
ブラウザに local1.com:9876 でアクセスして画面に「local1.com」と、local2.com:9876 でアクセスして画面に「local2.com」と表示されました。ピースオブケイク…!
まとめ
最近レガシー案件とかトラブル対応ばかりやっていたので、これぐらいの体験でも感動してしまいました(これぐらいの体験とかいうなめっちゃ便利に作ってくれとるぞ)
Laravelありがとう!