Apache1台でいくつものwebアプリを運営しているとき、
ホスト名だけでは間に合わず、aliasを指定して振り分けることと思います。
今回、そのうちの1つにLaravel+Inertia+Vueのアプリがあったのですが、
Routingがうまく動作せずハマってしまったのでその解決をメモ。
Apacheのalias設定
そのサーバは以下のように複数のアプリをaliasをきって
振り分けていました。
<VirtualHost *:443> Protocols h2 http/1.1 ServerName test.sample.co.jp ServerAdmin hoge@fuga.biz DocumentRoot /home/test/wordpress alias /system "/home/test/prod/laravel/public"
test.sample.co.jpにはwordpressにアクセスさせ、
test.sample.co.jp/systemにはLaravelのアプリにアクセスさせる感じです。
RoutingとController
Routingを以下のように設定しました。
Route.get('/login',[AuthController.class, 'create']);
Controllerは以下のように記述していました。
class AuthController extends Controller { public function create() { return Inertia::render('Auth/Login', []); } }
この場合にうまく動作しない現象
さて、ここで以下のようにアクセスしてみました。
test.sample.co.jp/system/login
すると
test.sample.co.jp/system/system/login
systemが1つ多いURLにリダイレクトされる形になってしまいました。。。
原因と解決策
この問題を引き起こしている原因は、Inertia::renderメソッドが返却する
Responseクラスにありました。
このクラスは以下です。
vendor/inertiajs/inertia-laravel/src/Response.php
早速中身を眺めて行くと、toResponseというメソッドの中で、
以下のような記述がありました。
$page = [ 'component' => $this->component, 'props' => $props, 'url' => $request->getBaseUrl().$request->getRequestUri(), 'version' => $this->version, ];
urlの値をbaseUrlとrequestUriを結合してますね。
baseUrlにsystemが入っているため、1つ多くsystemがくっついたURLになっていたと
考えられます。
なので、これをカットしてみました。
$page = [ 'component' => $this->component, 'props' => $props, 'url' => $request->getRequestUri(), // ←修正 'version' => $this->version, ];
これで無事
test.sample.co.jp/system/login
へアクセスすることができるようになりました。
とはいえ、、、
修正する対象がvendor配下にあるプログラムを直接修正してしまっているので、
composerなどでversionupすると書き換わってしまう恐れもありますので、
注意が必要です。
なんかもっといい方法がありそうですが、一旦解決策でした。
それでは!!!
20代前半までは東京で音楽をやりながら両手の指以上の業種でアルバイト生活をしていましたが、某大手プロバイダのテレアポのバイトでPCの知識の無さに愕然とし、コンピュータをもっと知りたい!と思ったことをきっかけに25歳の時にITの世界に未経験で飛び込みました。
紆余曲折を経て、現在は個人事業主としてお仕事させていただいており、10年ほどになります。
web制作から企業システム構築、ツール開発など、フロントエンドもバックエンドもサーバーもDBAも依頼があれば何でもやってきた雑食系エンジニアです。
今風にいうとフルスタックエンジニアということになるのでしょうか??
→ 詳細プロフィールというか、生い立ちはこちら
→スキルシートをご覧になる場合はこちら
→お仕事のご依頼やお見積りなどお問い合わせはこちらから!
コメント