Laravelでは、通常、画像や静的ファイルに対するリクエストは、
”ルートの設定をしなくても対応可能”
です。
ただし、それはファイルが正しい場所に配置され、ウェブサーバー(Apache/Nginxなど)
がその場所を公開している場合に限ります。
1. デフォルトの静的ファイルの取り扱い
Laravelプロジェクトでは、publicディレクトリがデフォルトでウェブサーバーによって
公開されます。このため、publicディレクトリ内に画像を配置すれば、
以下のように直接アクセスできます。
例:
- 画像パス:
public/images/example.jpg - URL:
http://your-domain.com/images/example.jpg
ブラウザーからの呼び込みに、対応するLaravelのコードを必要としません。
そもそもWebサーバーが対応してしまいます。
2. storageディレクトリに保存されたファイル
Laravelでファイルや画像を管理する際、storageディレクトリを使用することが一般的です。
この場合、php artisan storage:linkコマンドを実行して、storageディレクトリの内容をpublic/storageとして公開する必要があります。
手順:
- 画像を保存:
- 例えば、
storage/app/public/imagesに画像を保存。
- 例えば、
- シンボリックリンクを作成:bashコードをコピーする
php artisan storage:linkこのコマンドにより、storage/app/publicがpublic/storageとして公開されます。 - アクセスURL:
- 画像パス:
storage/app/public/images/example.jpg - URL:
http://your-domain.com/storage/images/example.jpg
- 画像パス:
注意点:
シンボリックリンクを作成しない場合、storageディレクトリのファイルには
直接アクセスできません。
3. ルート設定が必要な場合
Laravelで画像リクエストをルートで制御したい場合は、ルートを定義することも可能です。
たとえば、認証が必要な画像アクセスやカスタム処理を行いたい場合に使用されます。
ルートの例:
phpuse Illuminate\Support\Facades\Route;
use Illuminate\Support\Facades\Storage;
Route::get('/image/{filename}', function ($filename) {
$path = storage_path('app/public/images/' . $filename);
if (!file_exists($path)) {
abort(404);
}
return response()->file($path);
});
動作:
- リクエストURL:
http://your-domain.com/image/example.jpg - Laravelが
storage/app/public/images/example.jpgを探し、クライアントに提供します。
4. ウェブサーバーの設定
Laravelが画像リクエストに直接対応するかどうかは、使用しているウェブサーバーの
設定にも依存します。
Nginxの設定例:
nginxserver {
location / {
try_files $uri /index.php?$query_string;
}
location ~* \.(jpg|jpeg|png|gif|webp|ico|svg|css|js|ttf|woff|woff2|eot|otf|ttc|mp4|webm|ogg|mp3|wav|pdf|doc|docx|xls|xlsx|ppt|pptx|zip|rar|7z)$ {
expires 6M;
access_log off;
}
location ~ \.php$ {
include fastcgi_params;
fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
}
この設定では、静的ファイル(例: jpg, png, cssなど)は直接提供され、
Laravelには処理が渡りません。
5. まとめ
- ルート設定不要:
publicディレクトリ内に画像を配置する場合、ルート設定は不要。storageディレクトリを使用する場合、php artisan storage:linkを実行して公開する。
- ルート設定が必要なケース:
- カスタムロジックや認証を追加したい場合は、ルートで画像リクエストを制御する。
Laravelは基本的な画像リクエストに対応しつつ、高度なカスタマイズにも柔軟に対応できます。


