2013-04-05 84 views
11

我Laravel 4應用程序日誌中有時表現出NotFoundHttpExceptionLaravel 4例外:NotFoundHttpException

exception 'Symfony\Component\HttpKernel\Exception\NotFoundHttpException' in /var/www/laravel4/bootstrap/compiled.php:7420 
Stack trace: 
#0 /var/www/laravel4/bootstrap/compiled.php(7137): Illuminate\Routing\Router->handleRoutingException(Object(Symfony\Component\Routing\Exception\ResourceNotFoundException)) 
#1 /var/www/laravel4/bootstrap/compiled.php(7113): Illuminate\Routing\Router->findRoute(Object(Illuminate\Http\Request)) 
#2 /var/www/laravel4/bootstrap/compiled.php(958): Illuminate\Routing\Router->dispatch(Object(Illuminate\Http\Request)) 
#3 /var/www/laravel4/bootstrap/compiled.php(946): Illuminate\Foundation\Application->dispatch(Object(Illuminate\Http\Request)) 
#4 /var/www/laravel4/public/index.php(49): Illuminate\Foundation\Application->run() 
#5 {main} 

什麼可能造成的?堆棧跟蹤不會顯示我的代碼中的任何內容。

+0

兩個相關的可能性 - (1)如果你的網站可以在網絡上(或網絡上的)其他人可能會打你的網站有生成NotFound錯誤的無效URL或(2)您的計算機上的某些內容可能正在使用無效url訪問本地主機。其中任何一個都意味着它不是你的代碼而不是你的問題。 – 2013-04-05 22:14:57

回答

1

很難確定是什麼原因造成的,無需知道您的代碼。看看錯誤的堆棧跟蹤,很明顯,路由器正在調度它,我想它與後臺作業本身無關,而是它調用的API。

在您的特定情況下,例外情況發生在ResourceNotFoundException之後,當沒有爲此類網址格式定義路由時發生此異常。

可能出現的問題:

如果後臺作業做對你自己的API的一個file_get_contentscurl,可以調用一個不存在的路徑,然後拋出該異常。

如果您無法控制URL的後臺作業正在下載,它可能試圖獲取URL如127.0.0.1,localhost或類似的東西。

+0

您也可以使用與您的路線中指定的方法不同的方法請求URL,例如。如果你用'POST'做了一個路由,而你試圖'GET',那就會失敗。 – 2014-01-22 23:28:08

24

A NotFoundHttpException在您的應用程序中基本上只是一個404。不幸的是,這個異常消息甚至不會告訴你觸發異常的請求的URL,當你在日誌中看到它們時,很難理解這些錯誤。

爲了給你更多的調試信息,建立你自己的404處理程序。這裏有一個簡單的處理程序,它將記錄URL(所以你知道什麼被要求觸發錯誤)和用戶代理(以幫助你找出誰或什麼提出請求)並返回一個視圖和404代碼:

App::missing(function($e) { 
    $url = Request::fullUrl(); 
    $userAgent = Request::header('user-agent'); 
    Log::warning("404 for URL: $url requested by user agent: $userAgent"); 
    return Response::view('errors.not-found', array(), 404); 
}); 

把它放在app/start/global.php

+0

不得不清理這一點,但它本來是一個救星! – 2014-05-28 02:26:47

+1

那關於Laravel 5? – zygimantus 2016-10-11 20:24:47

3

我得到了這個問題,因爲我已經大寫了父目錄的名稱,並沒有在URL中大寫。這就是我得到錯誤的原因。

我就是用這個網址 本地主機/ laravel/todo2 /公/富 而事實上它的工作,如果所有我輸入了: 本地主機/ Laravel/todo2 /公/ 但如果我輸入任何東西在公衆之後/它會給出這個錯誤。

如果我用這與Laravel資本 本地主機/ Laravel/todo2 /公/富

後公衆的路由/會工作

+0

我做了同樣的,並重命名父文件夾後解決 – 2015-10-19 04:35:56

1

我的項目是在C:\ XAMPP \ htdocs中\ COLORTEX

我通過鍵入

http://localhost/myproject/public/image

得到這個錯誤

代替

http://localhost/MyProject/public/image

我在窗口,所以我想它會忽略大小寫,但是......

小心一點。

0

我得到這個錯誤,因爲我在表單中使用method =「post」而不是method =「POST」。

可能對某人有用。

1

您可以從日誌文件中過濾404(NotFoundHttpException)錯誤。
文件位置:應用程序/啓動/ global.php

App::error(function(Exception $exception, $errorCode) 
{ 
    $requestUrl = Request::fullUrl(); 
    $userAgent = Request::header('user-agent'); 

    if($errorCode != 404){ 
     Log::error('Exception', array(
      'errorCode' => $errorCode, 
      'requestUrl' => $requestUrl, 
      'userAgent' => $userAgent, 
      'context' => $exception, 
     ));  
    } 

    return Response::view('error-page-path.error-404', array(), 404); 
    // Here "error-404" is a blade view file in "error-page-path" directory 
});