Laravel8系でサブディレクトリ配下の公開に対応する

2023年6月6日追記: Laravel10系で試したところ表示されませんでした。設定がまずかったのかも? と思いつつLaravel8系にしたところ問題なく表示されたので設定の変更が必要か、10系だと公開できなくなった可能性があります。追記ここまで。

Laravel6系までは対応していたサブディレクトリ配下での公開がサポートされなくなったようです。公式のissueで記述がありました。

https://github.com/laravel/framework/issues/42539

調べると一応抜け道はあるらしく、.htaccessやapacheの設定などが公開されていましたが、もっと簡単にお手軽に設定できないかと調整した結果をまとめておきます。

なお、確認したLaravelのバージョンは 8.83.26、PHPは 7.4系です

一応は表示されるように設定できますが、公式サポートされていない方法なので何か問題が発生する場合もあるため自己責任でお願いします。

route:clear

.htaccessやapacheの設定は変えずに、route:clearの実行で対応できます。

php artisan optimize
php artisan route:clear

通常はoptimizeでそれぞれのキャッシュ作成がまとめて実行されますが、routeのキャッシュだけclearすれば表示可能です。

以上がミソで、あとは設定ファイルをサブディレクトリ対応させます。以下の設定はLaravel7系以前からサブディレクトリ運用で必要だった項目? かと思います。

APP_URL=https://<ドメイン>/<サブディレクトリ>
// 静的ファイルの読み込みを絶対URLに変更、jsなどもasset()で囲めば対応可
    <link rel="stylesheet" href="{{ asset(mix('css/app.css')) }}">
mix.js('resources/js/app.js', 'public/js')
    .postCss('resources/css/app.css', 'public/css', [
    // mix() で囲んでいるので.version()の記述も追加、サブディレクトリ自体には関係ないかも
    ]).version();

あとはLaravelのpublicフォルダを配信したいサブディレクトリにシムリンクを貼れば公開できます。

お疲れ様でした。

投稿者


Comments

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA