我试图让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.php在errors文件夹中添加页面:
好吧,你可以自己定制404页面404.blade.php.
注意
仅在运行URL时才会在路由中列出此情况.您可以在web.php文件中找到.
如果您需要通过自定义调用,只需在控制器中调用如下:
public function show_me()
{
abort(404); //404 page
}
Run Code Online (Sandbox Code Playgroud)
希望能帮助到你!
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的内容.
您可以使用中止助手:
abort(404);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
36591 次 |
| 最近记录: |