【问题标题】:Custom 404 page in CakePHP 3.XCakePHP 3.X 中的自定义 404 页面
【发布时间】:2015-09-06 09:01:58
【问题描述】:

我想为生产环境中进入网站的所有错误创建一个自定义 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 错误时,您不应该重定向用户,您应该简单地使用默认404customize the template
  • 是的,但在某些情况下,当用户在域内手动更改网址时,我必须将该用户重定向到 404 页面
  • “当用户手动更改网址时”是什么意思?如果用户输入了一个不正确的 url,那么 cake 会抛出一个错误并显示 404 错误,你不应该将他们重定向到自定义页面。
  • 假设我有一个 url 结构 example.com/blogs/24 其中 blogs 是一个目录,24 是博客的 id,我使用这个 id 进行数据库查询。现在,如果某些用户在浏览器中更改(此 ID)并查询结果为空数据,在这种情况下,我想将用户重定向到自定义 404 页面
  • 如果发生这种情况,您应该抛出 Cake\Network\Exception\NotFoundException 而不是重定向,如果配置得当,这将呈现 404 错误。

标签: cakephp


【解决方案1】:

不要重定向

如果页面应该呈现 404,正确的操作是呈现 404

重定向到另一个页面会让用户感到困惑,尤其是因为许多浏览器会缓存 301 响应,从而使原始 URL 无法访问。这也会影响例如搜索引擎作为静态文件404.html 将有一个 200 响应代码(除非您修改您的网络服务器配置)所以它会说 404 但根本不是。

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

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

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

如果 get 操作没有找到任何结果,将引发 Cake\Datasource\Exception\RecordNotFoundException。您可以自己捕获此异常,也可以让 CakePHP 将其转换为 404 错误。

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

更改 404 模板

如果你想改变 404 或 500 页面的外观change the template files

对于所有 4xx 和 5xx 错误,分别使用模板文件 error400.ctp 和 error500.ctp。

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

【讨论】:

    【解决方案2】:

    如果 get 操作没有找到任何结果,则会引发 Cake\Datasource\Exception\RecordNotFoundException。您可以自己捕获此异常,也可以让 CakePHP 将其转换为 404 错误。

    【讨论】:

      【解决方案3】:

      最简单的方法可以分两步实现,

      第 1 步:

      在 config/app.php 中关闭调试模式

      第 2 步:

      src/Template/Layout/error.ctp 的内容替换为您的自定义布局。

      【讨论】:

        猜你喜欢
        • 2018-05-25
        • 2015-06-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-11-16
        • 2017-09-23
        • 2016-05-14
        相关资源
        最近更新 更多