我可以让CakePHP根据特定条件返回合适的状态代码吗?

我可以让CakePHP根据特定条件返回合适的状态代码吗?,cakephp,http-status-code-404,Cakephp,Http Status Code 404,这个问题和我以前的帖子有点关系 经过深思熟虑,我正在探索在我的Cake应用程序中使用自定义404脚本的选项,当URL没有映射到任何控制器/操作时,就会使用该脚本。这个脚本将在这里检查$This->,并在重定向数据库中查找它。如果找到匹配项,它将跟踪特定的“促销”代码并重定向 我在想身份代码。我可以根据特定条件使脚本返回合适的状态代码吗?例如: URL匹配重定向-返回301 URL确实没有目的地-返回404 我能做这个吗 编辑: 这个怎么样?有人看到它有什么问题吗?我把它放在app_控制器中 fu

这个问题和我以前的帖子有点关系

经过深思熟虑,我正在探索在我的Cake应用程序中使用自定义404脚本的选项,当URL没有映射到任何控制器/操作时,就会使用该脚本。这个脚本将在这里检查$This->,并在重定向数据库中查找它。如果找到匹配项,它将跟踪特定的“促销”代码并重定向

我在想身份代码。我可以根据特定条件使脚本返回合适的状态代码吗?例如:

  • URL匹配重定向-返回301
  • URL确实没有目的地-返回404
  • 我能做这个吗

    编辑:

    这个怎么样?有人看到它有什么问题吗?我把它放在app_控制器中

    function appError($method, $params) {
    
        //do clever stuff here
    
    }
    

    这应该行得通。假设您在LegacyUrls::map()控制器操作中重定向404。代码需要存储在app/app_error.php中:

    <?php
    class AppError extends ErrorHandler{
        function error404($params) {
            $Dispatcher = new Dispatcher();
            $Dispatcher->dispatch('/legacy_urls/map', array('broken-url' => '/'.$params['url']));
            exit;
        }
    
        function missingController($params) {
            $Dispatcher = new Dispatcher();
            $Dispatcher->dispatch('/legacy_urls/map', array('broken-url' => '/'.$params['url']));
            exit;
        }
    }
    ?>
    
    
    

    祝你好运

    这应该行得通。假设您在LegacyUrls::map()控制器操作中重定向404。代码需要存储在app/app_error.php中:

    <?php
    class AppError extends ErrorHandler{
        function error404($params) {
            $Dispatcher = new Dispatcher();
            $Dispatcher->dispatch('/legacy_urls/map', array('broken-url' => '/'.$params['url']));
            exit;
        }
    
        function missingController($params) {
            $Dispatcher = new Dispatcher();
            $Dispatcher->dispatch('/legacy_urls/map', array('broken-url' => '/'.$params['url']));
            exit;
        }
    }
    ?>
    
    
    

    祝你好运

    我总是创建app\views\errors\missing\u action.ctpapp\views\errors\missing\u controller.ctp

    当url未映射到控制器或其方法时,Cake将自动显示其中一个视图


    除非您没有给出错误代码,否则这将非常有效

    我总是创建app\views\errors\missing\u action.ctpapp\views\errors\missing\u controller.ctp

    当url未映射到控制器或其方法时,Cake将自动显示其中一个视图


    除非您没有给出错误代码,否则这将非常有效

    我想补充费利克斯奇的答案

    此版本向浏览器输出404错误:

    class AppError extends ErrorHandler
    {
            function _outputMessage($template)
            {
                    if ($template === 'error404') {
                            $Dispatcher = new Dispatcher();
                            $Dispatcher->dispatch('legacy_urls/map', array('broken-url' => '/'.$params['url']));
                            return;
                    }
                    parent::_outputMessage($template);
            }
    }
    

    我想补充费利克斯奇的答案

    此版本向浏览器输出404错误:

    class AppError extends ErrorHandler
    {
            function _outputMessage($template)
            {
                    if ($template === 'error404') {
                            $Dispatcher = new Dispatcher();
                            $Dispatcher->dispatch('legacy_urls/map', array('broken-url' => '/'.$params['url']));
                            return;
                    }
                    parent::_outputMessage($template);
            }
    }