13

我的 Laravel 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}

是什么原因造成的?堆栈跟踪没有显示我的代码中的任何内容。

4

6 回答 6

26

ANotFoundHttpException基本上只是您的应用程序中的 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

于 2014-01-10T12:30:34.653 回答
3

我遇到了这个问题,因为我已经大写了父目录的名称并且没有在 URL 中大写它。这就是我得到错误的原因。

我正在使用这个 url localhost/laravel/todo2/public/foo ,事实上,如果我输入的只是: localhost/Laravel/todo2/public/ ,但如果我在 public/ 之后输入任何内容,它会给出那个错误。

如果我将它与 Laravel 大写的 localhost/Laravel/todo2/public/foo 一起使用

public/ 之后的路线会起作用

于 2014-05-29T10:13:03.850 回答
1

我的项目在C:\xampp\htdocs\ColorTex

我输入了这个错误

http://localhost/myproject/public/image

代替

http://localhost/MyProject/public/image

我在 Windows 中,所以我认为它会忽略大写,但是......

小心点。

于 2014-09-15T08:48:56.593 回答
1

在不知道您的代码的情况下,很难确定是什么原因造成的。查看错误的堆栈跟踪,很明显路由器正在调度它,我猜它与后台作业本身无关,而是它调用的 API。

在您的特定情况下,异常是在ResourceNotFoundException之后引发的,当没有为此类 URL 模式定义路由时会发生这种情况。

可能出现的问题:

如果后台作业执行您自己的 APIfile_get_contentscurl在您自己的 API 上,它可能正在调用一个不存在的路由,然后抛出该异常。

如果您无法控制正在下载的后台作业的 URL,它可能会尝试获取类似 的 URL或类似127.0.0.1localhost任何内容。

于 2013-05-14T22:34:57.870 回答
1

您可以从日志文件中过滤 404 (NotFoundHttpException) 错误。
文件位置:app/start/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
});
于 2017-08-09T11:35:26.013 回答
0

我收到此错误是因为我在表单中使用了 method="post" 而不是 method="POST"。

可能对某人有用。

于 2017-04-27T23:55:59.760 回答