如何使Laravel 5返回404状态码

问题描述:

我试图让Laravel 5(5.1.31)在找不到页面时返回404的http状态响应。我曾尝试一些东西,它总是返回200如何使Laravel 5返回404状态码

在我的控制器我有这样的:

else 
    { 
    header('HTTP/1.0 404 Not Found'); 
    return view('errors.404); 
    } 

我也曾尝试:

else 
    { 
    http_response_code(404); 
    return view('errors.404); 
    } 

else 
    { 
    abort(404, 'Page not found'); 
    } 

我也试过把这个放在404.刀片

@inject('response', 'Illuminate\Http\Response') 
{{ $response->status(404) }} 

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

+0

https://laravel.com/docs/5.1/errors。你在哪里看到代码200?在开发人员工具栏中? –

+0

在浏览器中,当我加载页面时,laravel返回200作为状态码。我需要它返回404找不到页面,这对于搜索引擎蜘蛛来说尤其重要,以便他们知道他们何时到达了错误的地址。 –

+0

'中止(404)'应该工作。你的if语句的其他部分是否被执行? –

虽然我不知道为什么中止不返回404种状态,因为它是假设,我没有找到一个解决方案,这将使Laravel返回404种状态:

这里是我做过什么:

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

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

很简单,我假设你使用Laravel V5 ++只是去

app > Exceptions > Handler.php 

见下面的图片:

enter image description here

而且从修改代码:

public function render($request, Exception $e) 
{ 
    return parent::render($request, $e); 
} 

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

然后,不要忘记在errors文件夹添加404.blade.php页:

enter image description here

那么,你可以在404.blade.php自己定制的404页。


只有当您运行的URL并没有列为路由这种情况。您可以在web.php文件中找到。

如果你需要通过自定义调用,只需在控制器调用象下面这样:

public function show_me() 
{ 
    abort(404); //404 page 
} 

希望它能帮助!

+0

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