1

这个问题与我的旧帖子在 CakePHP 中处理别名 URL略有相关

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

我在考虑状态码。我可以让我的脚本根据某些条件返回合适的状态码吗?例如:

  1. URL 匹配重定向 - 返回 301
  2. URL 确实没有目的地 - 返回 404。

我可以这样做吗?

编辑:

那这个呢?有人看到它有什么问题吗?我把它放在 app_controller 中。

function appError($method, $params) {

    //do clever stuff here

}
4

3 回答 3

6

这应该有效。假设您在 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;
    }
}
?>

祝你好运!

于 2009-06-03T16:36:42.127 回答
4

我一直创建app\views\errors\missing_action.ctpapp\views\errors\missing_controller.ctp

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

除非对您没有提供的错误代码有一定的需求,否则这将完美无缺!

于 2009-06-03T17:32:45.663 回答
0

我想补充felixge的答案。

此版本向浏览器输出 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);
        }
}
于 2011-11-05T21:10:23.177 回答