如何使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?
虽然我不知道为什么中止不返回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
见下面的图片:
而且从修改代码:
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
页:
那么,你可以在404.blade.php
自己定制的404页。
注
只有当您运行的URL并没有列为路由这种情况。您可以在web.php
文件中找到。
如果你需要通过自定义调用,只需在控制器调用象下面这样:
public function show_me()
{
abort(404); //404 page
}
希望它能帮助!
已经有/errors/404.blade.php。 已经尝试在我的控制器中使用abort(404)。它正在返回正确的404刀片,但它仍然向浏览器发送状态代码200,而不是正确的404错误代码。 您可能希望阅读整个问题,因为所有这些信息都在原始问题中,以及我正在运行的Laravel版本是什么。 –
https://laravel.com/docs/5.1/errors。你在哪里看到代码200?在开发人员工具栏中? –
在浏览器中,当我加载页面时,laravel返回200作为状态码。我需要它返回404找不到页面,这对于搜索引擎蜘蛛来说尤其重要,以便他们知道他们何时到达了错误的地址。 –
'中止(404)'应该工作。你的if语句的其他部分是否被执行? –