質問: 質問させてください。 今 Laravel で画像アップロード掲示板を作っていまして、画像自体はアップロードできたのですが、それを View で表示できなくて困っております。 ### 前提・実現したいこと Laravel でアップロードした画像を `https://〇〇〇.com/storage/xxx.jpg` のパスで表示させたいです。 ### 発生している問題 少しややこしい話になるのですが、順番に説明させていただきます。 まず、さくらレンタルサーバーで myapp というフォルダに Laravel をインストールしました。 このままだと、View の `index.blade.php` を表示するための URL が `https://〇〇〇.com/myapp/public/` になってしまうため、ドキュメントルートを変更する必要があり、こちらのサイトを参考に、public フォルダの中身を全部ルートに移動させました。 これで `https://〇〇〇.com/` にアクセスすればトップページが表示されるようになりました。 なので今本番環境のディレクトリ構成は下のようになっています。 ``` root/ ├ myapp/ ← Laravelをインストール │ ├ public/ │ │ └ storage/ ← ★シンボリックリンク │ └ storage/ │ └ app/ │ └ public/ │ └ xxx.jpg ← ★ここに画像がアップロードされている ├ web.config ← public から移動 ├ .htaccess ← public から移動 ├ favicon.ico ← public から移動 ├ index.php ← public から移動 └ robots.txt ← public から移動 ``` 次に Controller の `storeAs()` メソッドで画像を `storage/app/public` にアップしました。 ここからが本題なのですが、こちらのサイトに「Laravelの画像の置き場所の推奨は、`public/images` 配下に直接ファイルを置くのではなく、`storage/app/public` 配下に置き、`public/storage` から `storage/app/public` にシンボリックリンクを貼り、そちらにアクセスすることを推奨」とあるため、 ``` php artisan storage:link ``` でシンボリックリンクを作成しました。 そうすると、public フォルダの中に `storage` というシンボリックリンクができるのですが、public フォルダの中身を全部ルートへ移動してしまっているために、シンボリックリンクにアクセスできず困っております。 vagrant の仮想環境でテストするときは `php artisan serve --host 192.168.33.10 --port 8000` でサーバーを立ち上げていたため、public の中身を移動させる必要がなく、`http://192.168.33.10:8000/storage/xxx.jpg` でシンボリックリンクにアクセスして画像を表示できていました。 ### 試したこと 今画像は `/myapp/storage/app/public/` フォルダの中にあるので、そのまま `https://〇〇〇.com/myapp/storage/app/public/xxx.jpg` でブラウザに表示されるのですが、これだと推奨されないやり方だと思うので良くなさそうです。 `config/filesystems.php` をいじれば解決する気がするのですが、Laravelに詳しくなくどこから触っていいかよく分かりません・・・ 説明がややこしくて申し訳ありません。 どなたか詳しい方がいらっしゃいましたら、ご教授いただけますと助かります。 よろしくお願いいたします。 ### 補足情報(FW/ツールのバージョンなど) 開発環境は以下になります。 ・vagrant(テスト用) ・さくらレンタルサーバー(本番用) ・Laravel 5.8 ・php 7.3
回答: SSHしてln -s で手動でシンボリックリンク貼ればいいと思います