CakePHP中的重定向循环

Ani*_*shi 1 ip redirect cakephp

我正在开发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')); 
        }
Run Code Online (Sandbox Code Playgroud)

一旦条件匹配,我就会得到一个重定向循环.:(

Joh*_*hnP 5

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

  1. 访问URL => AppController触发,发送到/ admin/controller/index /
  2. 在/ admin/controller/index/AppController再次触发并发送到/ admin/controller/index /
  3. 如上

另一件事,你在重定向后似乎回应了一个链接,这没有任何意义.

你可能想要的是这样的

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

此外,当你这样做时,你$this->redirect(array('action'=>'index', 'admin'=>1));实际上是重定向到你所在的URL的索引操作.这是你想要做的吗?如果是这样,您需要将支票修改为类似的内容

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