2010-11-05 121 views
0

控制器中是否有方法或函数来告诉404错误是否被触发?我希望每个人都能在主页上重定向,而不是看到404页面。CakePHP:将所有404错误重定向到主页?

谢谢!

+2

只是一个侧面说明,这一点很重要,你的缺页真的是404个网页发送404头,否则搜索引擎可能会继续索引断开的链接。几乎每个主要网站都支持通过简单重定向的404页面。这样做的好处是,您仍然可以在404页面上添加功能来建议或允许用户搜索他们真正在寻找的内容。 – 2010-11-05 17:45:14

回答

7

要捕获和处理404错误,您需要扩展ErrorHandler类并覆盖error404方法。要做到这一点,创建文件app/app_error.php用下面的代码:

class AppError extends ErrorHandler { 
    function error404($params) { 
     // redirect to homepage 
     $this->controller->redirect('/'); 
    } 
} 

Manual

+2

这只适用于1.2 – medoix 2012-12-07 08:41:21

+0

手动链接已死 – tsukimi 2014-09-03 01:45:43

0

对于CakePHP的2.x的我用

// app/Lib/Error/AppExceptionRenderer.php 
<?php 
App::uses('ExceptionRenderer', 'Error'); 
class AppExceptionRenderer extends ExceptionRenderer { 
    public function error400($error) { 
     return $this->controller->redirect('/'); 
    } 

} 

//app/Config/Core.php 

Configure::write('debug', 0); 
Configure::write('Exception', array(
     'handler' => 'ErrorHandler::handleException', 
     //'renderer' => 'ExceptionRenderer', 
     'renderer' => 'AppExceptionRenderer', 
     'log' => true 
    )); 
0

最简单的方法就是把这个在您的应用程序/ Config/core.php

Configure::write('Exception.handler', function ($error) { 
    header('Location: https://www.example.com'); 
}); 

请注意,匿名函数为回调是由PHP V5.3 +

0

CakePHP的2.x的v

使用的AppController :: appError()

实现这个方法是实现自定义 异常处理程序的替代支持。它主要用于向后兼容 ,不推荐用于新应用程序。这个 控制器方法被调用,而不是默认的异常 渲染。它接收抛出的异常作为唯一的参数。您 应该实现你的错误该方法处理:

步骤1 :: 文件:应用程序/控制器/ AppController.php

class AppController extends Controller { 
    public function appError($error) { 
     // custom logic goes here. Here I am redirecting to a custom page 
     header("Location : /pages/notfound"); 
    } 
} 

第2步:创建自定义视图。 app/View/pages/notfound.ctp

在此文件中写入自定义消息。

参考:

http://book.cakephp.org/2.0/en/development/exceptions.html#using-appcontroller-apperror