我想为所有出现在生产环境网站的错误创建一个自定义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中.