如何使Laravel 5返回404状态代码

Dan*_*ett 5 laravel-5

我试图让Laravel 5(5.1.31)在找不到页面时返回404的http状态响应.我尝试了几件事,它总是返回200.

在我的控制器中我有这个:

else
   {
   header('HTTP/1.0 404 Not Found');
   return view('errors.404);
   }
Run Code Online (Sandbox Code Playgroud)

我也尝试过:

else
   {
   http_response_code(404);
   return view('errors.404);
   }
Run Code Online (Sandbox Code Playgroud)

else
   {
   abort(404, 'Page not found');
   }
Run Code Online (Sandbox Code Playgroud)

我也试过把它放在404.blade中

@inject( 'response', 'Illuminate\Http\Response' )
{{ $response->status(404) }}
Run Code Online (Sandbox Code Playgroud)

没有成功.无论我尝试什么,Laravel都会返回200.如何让它返回404?

Ner*_*ere 14

很简单,我假设你只使用Laravel v5 ++

app > Exceptions > Handler.php
Run Code Online (Sandbox Code Playgroud)

见图如下:

在此输入图像描述

并修改以下代码:

public function render($request, Exception $e)
{
    return parent::render($request, $e);
}
Run Code Online (Sandbox Code Playgroud)

public function render($request, Exception $e)
{
    if ($e instanceof MethodNotAllowedHttpException)
    {
        abort(404);
    }
    return parent::render($request, $e);
}
Run Code Online (Sandbox Code Playgroud)

然后,不要忘记404.blade.phperrors文件夹中添加页面:

在此输入图像描述

好吧,你可以自己定制404页面404.blade.php.


注意

仅在运行URL时才会在路由中列出此情况.您可以在web.php文件中找到.

如果您需要通过自定义调用,只需在控制器中调用如下:

public function show_me()
{
   abort(404);  //404 page
}
Run Code Online (Sandbox Code Playgroud)

希望能帮助到你!

  • 已经有了/errors/404.blade.php。已经尝试在我的控制器中使用 abort(404)。它正在返回正确的 404 刀片,但它仍然向浏览器发送状态代码 200,而不是正确的 404 错误代码。您可能希望阅读整个问题,因为所有这些信息都在原始问题以及我正在运行的 Laravel 版本中... (2认同)

Dan*_*ett 11

虽然我不知道为什么abort没有像我们想的那样返回404状态,但我确实找到了一个解决方案,它将使Laravel返回404状态:

这是我做的:

else {
    $data['title'] = '404';
    $data['name'] = 'Page not found';
    return response()
        ->view('errors.404',$data,404);
}
Run Code Online (Sandbox Code Playgroud)

这实际上对我的目的更好,因为它不会像我的中止那样弄乱我的404.blade的内容.


风声猎*_*声猎猎 8

您可以使用中止助手:

abort(404);
Run Code Online (Sandbox Code Playgroud)

  • 不,这一定不是公认的答案。这个答案不仅没有解决问题,还表明回答者没有阅读问题,因为问题中已经解决了该非解决方案。简而言之,答案不起作用,如果写下答案的人读过这个问题,他们就会知道它不起作用。 (3认同)