MeWrite Docs

Symfony\Component\HttpKernel\Exception\NotFoundHttpException

Laravelで存在しないルートにアクセスした際の404エラー

概要

Laravelで定義されていないURLにアクセスした際、またはRoute Model Bindingでモデルが見つからない場合に発生する例外です。HTTPステータス404(Not Found)を返します。

エラーメッセージ

Symfony\Component\HttpKernel\Exception\NotFoundHttpException
No query results for model [App\Models\User] 1

原因

  1. ルート未定義: リクエストされたURLに対応するルートがない
  2. HTTPメソッド不一致: GET/POSTなどのメソッドが異なる
  3. Route Model Binding: 指定されたIDのモデルが存在しない
  4. ミドルウェア: 認証ミドルウェアによるリダイレクト
  5. キャッシュ: 古いルートキャッシュが残っている

解決策

1. ルートを確認

1
2
3
4
5
# 登録されているルートを一覧表示
php artisan route:list

# 特定のURIを検索
php artisan route:list --path=users
1
2
3
// routes/web.php
Route::get('/users', [UserController::class, 'index']);
Route::get('/users/{user}', [UserController::class, 'show']);

2. HTTPメソッドを確認

1
2
3
4
5
6
7
8
// Bad: GETでアクセスしているがPOSTで定義
Route::post('/users', [UserController::class, 'store']);

// Good: 適切なメソッドを使用
Route::get('/users', [UserController::class, 'index']);
Route::post('/users', [UserController::class, 'store']);
Route::put('/users/{user}', [UserController::class, 'update']);
Route::delete('/users/{user}', [UserController::class, 'destroy']);

3. Route Model Bindingの対処

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
// 例外をスローせずnullを返す
Route::get('/users/{user}', function (?User $user) {
    if (!$user) {
        return redirect('/users')->with('error', 'User not found');
    }
    return view('users.show', compact('user'));
});

// または withTrashed でソフトデリートを含める
Route::get('/users/{user}', function (User $user) {
    return view('users.show', compact('user'));
})->withTrashed();

4. ルートキャッシュをクリア

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
# ルートキャッシュをクリア
php artisan route:clear

# キャッシュを再生成
php artisan route:cache

# すべてのキャッシュをクリア
php artisan cache:clear
php artisan config:clear
php artisan view:clear

5. 404ページをカスタマイズ

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
// resources/views/errors/404.blade.php
@extends('layouts.app')

@section('content')
<div class="error-page">
    <h1>404</h1>
    <p>ページが見つかりません</p>
    <a href="{{ url('/') }}">ホームに戻る</a>
</div>
@endsection

6. 例外ハンドラで対処

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
// app/Exceptions/Handler.php
use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;

public function register(): void
{
    $this->renderable(function (NotFoundHttpException $e, Request $request) {
        if ($request->is('api/*')) {
            return response()->json([
                'message' => 'Resource not found'
            ], 404);
        }
    });
}

7. fallbackルートを設定

1
2
3
4
5
// routes/web.php
// 他のすべてのルートにマッチしない場合
Route::fallback(function () {
    return response()->view('errors.404', [], 404);
});

8. APIリソースルートの確認

1
2
3
4
5
6
7
8
// リソースルートの定義
Route::resource('users', UserController::class);

// 一部のルートのみ
Route::resource('users', UserController::class)->only(['index', 'show']);

// 一部を除外
Route::resource('users', UserController::class)->except(['destroy']);

よくある間違い

  • /users//users の末尾スラッシュの不一致
  • web.phpapi.php を混同
  • Route::resource で自動生成されるルートを把握していない
  • .htaccess や nginx設定の問題でLaravelにリクエストが届いていない

関連エラー

参考リンク

Laravel の他のエラー

最終更新: 2025-12-13