CakePHP 3.X中的自定义404页面

我想为所有出现在生产环境网站的错误创建一个自定义404页面.例如,如果我收到丢失的控制器或查看错误,那么它将重定向到

http://example.com/404.html,在某些情况下,我会故意将其重定向到http://example.com/404.html

CakePHP 2.x早期通过在AppContoller.php中添加以下操作来完成

public function appError($error) {
    $this->redirect('/page-not-found.html',301,false);
} 

但它在CakePHP 3.x中不起作用,我想在CakePHP 3.x中复制相同的行为

最佳答案 不要重定向

如果页面应呈现404,则采取的正确操作是呈现404.

重定向到另一个页面让用户感到困惑,特别是因为许多浏览器缓存301响应使得原始URL不可访问.这也影响例如搜索引擎作为静态文件404.html将有200个响应代码(除非你修改你的webserver配置)所以它会说404但不是.

The blog tutorial,所有开发人员在开始项目之前应该做的事情,引导您朝着正确的方向前进:

public function view($id)
{
    $article = $this->Articles->get($id);
    $this->set(compact('article'));
}

表方法get返回单个实体对象或抛出异常:

If the get operation does not find any results a Cake\Datasource\Exception\RecordNotFoundException will be raised. You can either catch this exception yourself, or allow CakePHP to convert it into a 404 error.

此示例中的控制器代码不需要具有任何“如果它不存在”的处理,因为默认情况下如果记录不存在,则结果为404.

更改404模板

如果要更改404或500页面的显示方式change the template files

For all 4xx and 5xx errors the template files error400.ctp and error500.ctp are used respectively.

错误模板为in your application,请注意在生产模式the output is very minimal中.

点赞