CakePHP中的重定向循环

时间:2011-06-22 16:19:55

标签: cakephp redirect ip

我正在开发CakePHP应用程序。我正在尝试根据用户的IP地址将用户重定向到管理员URL,为此我在app_controller.php中使用此代码

        if(env('REMOTE_ADDR')=='foo') {

        $this->redirect(array('action'=>'index', 'admin'=>1));
        echo $html->link(__('Logout', true), array('controller'=> 'users', 'action'=>'admin_index')); 
        }

条件匹配后,我正在获得重定向循环。 :(

1 个答案:

答案 0 :(得分:5)

这是因为您的app控制器会先触发代码。您编写的代码基本上转换为

  1. 访问网址=>启动AppController,将您发送到/ admin / controller / index /
  2. 在/ admin / controller / index / AppController中再次触发并将您发送到/ admin / controller / index /
  3. 如上所述
  4. 另一件事,您在执行重定向后似乎回应了一个链接,这不起任何作用。

    你可能想要的是这样的东西

    $url = 'Wherever you are redirecting to';
    if (env('REMOTE_ADDR') == 'foo' && $this->params['url']['url'] != $url) {
       $this->redirect($url);
    }
    

    此外,当你执行$this->redirect(array('action'=>'index', 'admin'=>1));时,你基本上会重定向到你所在的网址的索引操作。这是你想要做的吗?如果是这样,您需要将支票修改为

    $url = 'Wherever you are redirecting to';
    if (env('REMOTE_ADDR') == 'foo' && $this->params['action'] != 'index' && $this->params['admin'] != 1) {
       $this->redirect($url);
    }