メインコンテンツに移動
ホーム

古松

メインナビゲーション

  • ホーム
  • ビデオ
  • ご連絡

パンくず

  • ホーム
  • Object Not Found ページが表示された

Object Not Found ページが表示された

ユーザーに指定した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」ページが表示されました
    • laravel5にデバッガーでどこでこのページを表示させたかを究明したいですが、Webリクエストがlaravel5フレームワークにも来ていないことがわかりました。
    • 入力されたURLも書き換えられました: http://localhost/laravel5/public/user/ ⇒ http://localhost/user (「laravel5/public」が消されました)
    • これは、ApacheのRewirteRuleに書き換えらたことでこの現象になったことを突き止めました
    • laravelがRESTfullを実装するために、URLのRewriteRuleを設定していました: \laravel5\public\.htaccess
      #Redirect Trailing Slashes...
      RewriteRule ^(.*)/$ /$1 [L,R=301]
      
      • これは、最後にスラッシュがあった場合、スラッシュを削除するとともに、ルート(laravel5/public)までに削除してしまいました。

 

Object Not Foundページを表示させない方法

  • WebサーバーのDocumentRootをlaravle5の「public」に設定します(ApacheがURLを書き直すときに、publicディレクトリをなくす必要がなくなる)
    • 上記ディレクトリ(上記の例): ~\PHP_SOURCE\laravel5\public
    • laravel5の起動URL(上記の例): http://localhost/
  • ApacheのRewriteRuleをアプリ公開ディレクトリ(/laravel5/public)を含めるように書き直す
    #Redirect Trailing Slashes...
    RewriteRule ^(.*)/$ /laravel5/public/$1 [L,R=301]
    • RESTfullの規約ではURLの最後にスラッシュがあったときにエラー404(Object Not Found)が表示されます。
    • とりあえず、すべてのエラーをキャッチしたい場合、この書き換えルールを除外して、エラー処理はlaravel5にお任せをします。

検索フォーム

カテゴリ別

  • laravel
  • drupal
  • javascript
  • windows
  • html
  • mysql
  • php
  • apache
  • css
  • SEO
  • video
  • wordpress
  • linux
  • python
  • Electron
  • Visual Studio Code

google ads