【问题标题】:CakePHP: Redirecting all 404 errors to the homepage?CakePHP:将所有 404 错误重定向到主页?
【发布时间】:2010-11-05 17:24:42
【问题描述】:

控制器中是否有方法或函数可以判断是否触发了 404 错误?我希望每个人都重定向到主页,而不是看到 404 页面。

谢谢!

【问题讨论】:

  • 只是附带说明,重要的是您丢失的页面确实是发送 404 标头的 404 页面,否则搜索引擎可能会继续索引损坏的链接。几乎每个主要网站都喜欢 404 页面而不是简单的重定向。这样做的好处是您仍然可以在 404 页面上放置功能来建议或允许用户搜索他们真正想要的内容。

标签: php cakephp redirect


【解决方案1】:

要捕获和处理 404 错误,您需要扩展 ErrorHandler 类并覆盖 error404 方法。为此,请使用以下代码创建文件app/app_error.php

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

Manual

【讨论】:

    【解决方案2】:

    CakePHP v 2.x

    使用 AppController::appError()

    实现此方法是实现自定义的替代方法 异常处理程序。它主要是为向后提供的 兼容性,不建议用于新应用程序。这 调用控制器方法而不是默认异常 渲染。它接收抛出的异常作为其唯一参数。你 应该在该方法中实现您的错误处理:

    第 1 步 :: 文件:app/Controller/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

    【讨论】:

      【解决方案3】:

      简单的方法是把它放在你的 app/Config/core.php 中

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

      请注意,PHP v5.3+ 支持匿名函数作为回调

      【讨论】:

        【解决方案4】:

        对于 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
            ));
        

        【讨论】:

          猜你喜欢
          • 2016-06-13
          • 2011-07-22
          • 1970-01-01
          • 2011-07-02
          • 2013-12-04
          • 1970-01-01
          • 2020-05-16
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多