【问题标题】:Laravel 4 Exception: NotFoundHttpExceptionLaravel 4 异常:NotFoundHttpException
【发布时间】:2013-04-05 20:47:23
【问题描述】:

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

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

【问题讨论】:

  • 两种相关的可能性 - (1) 如果您的网站在网络上(或在您的网络上)可用,其他人可能会使用无效 URL 访问您的网站,这会产生 NotFound 错误或 (2)您机器上的某些东西可能会使用无效的 url 访问 localhost。其中任何一个都意味着它不是你的代码,也不是你的问题。

标签: php symfony laravel laravel-4


【解决方案1】:

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

【讨论】:

  • 不得不把它清理一下,否则它就是救命稻草!
  • 关于 Laravel 5 的呢?
【解决方案2】:

我遇到了这个问题,因为我将父目录的名称大写,而在 URL 中没有大写。这就是我收到错误消息的原因。

我使用的是这个网址 localhost/laravel/todo2/public/foo 事实上,如果我输入的只是: localhost/Laravel/todo2/public/ 但如果我在 public/ 之后输入任何内容,就会出现该错误。

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

public/ 之后的路由会起作用

【讨论】:

  • 我做了同样的事情并在重命名父文件夹后解决了
【解决方案3】:

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

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

可能的问题:

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

如果您无法控制后台作业正在下载的 URL,它可能会尝试获取诸如 127.0.0.1localhost 之类的 URL。

【讨论】:

  • 您可能还使用与路由中指定的方法不同的方法请求 URL,例如。如果您使用POST 创建了一条路线并且您尝试使用GET 它,那将会失败。
【解决方案4】:

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

我输入了这个错误

http://localhost/myproject/public/image

而不是

http://localhost/MyProject/public/image

我在windows,所以我以为它会忽略大小写,但是...

要小心。

【讨论】:

    【解决方案5】:

    您可以从日志文件中过滤 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
    });
    

    【讨论】:

      【解决方案6】:

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

      可能对某人有用。

      【讨论】:

        猜你喜欢
        • 2013-08-17
        • 1970-01-01
        • 1970-01-01
        • 2020-12-14
        • 1970-01-01
        • 2014-04-28
        • 2021-12-19
        • 2021-01-19
        • 1970-01-01
        相关资源
        最近更新 更多