ユーザーに指定したURLが存在しない場合、NotFoundHTTPExceptionがスローされる。Laravel5の初期設定では、このエラーの詳細を表示します。本番では、このエラーを表示させるわけにはいかず、エラーをキャッチして、ログ(またはDB)に保存、「ページが見つからない」メッセージを返すのは一般的となります。
NotFoundHTTPExceptionをキャッチするテストを繰り返しているときに、突然「Object Not Found」ページが表示され、Webリクエストがlaravel5のフレームワークに到達してなく、Webサーバー(Apache)から発生してしまいました。一体なぜこのような状態なったか、どのように対処したほうがいいかを調査しました。
Object Not Found ページが表示された原因
- 開発環境でlarave5フレームワークの上でWebアプリを構築しています。複数のWebアプリを同時に見る必要があるため、Webサーバー(Apache)のDocumentRootが直接laravel5の「public」に指定していなかったです。
- 開発環境のディレクトリ: ~\PHP_SOURCE
- laravel5フレームワークのディレクトリ: ~\PHP_SOURCE\laravel5\
- Webサーバー: Apache2.4 DocumentRoot: ~\PHP_SOURCE
- Webアプリの実行URL(例:laravelのWelcomeページの表示): http://localhost/laravel5/public
- Routeに定義していないパス(例:http://localhost/laravel5/public/user)を入力すると、NotFoundHTTPExceptionがスローされ、laravel5のエラー詳細ページが表示されます

- テストを別の入力パタンを変えて、URL最後にスラッシュ(http://localhost/laravel5/public/user/)を入れると、なんと「Object Not Found」ページが表示されました
Object Not Foundページを表示させない方法