前端控制器插件中的Zend Framework重定向导致重定向循环

时间:2011-12-21 06:22:32

标签: php zend-framework redirect apache2

class Ef_AppSecurity extends Zend_Controller_Plugin_Abstract
{
    public function preDispatch(Zend_Controller_Request_Abstract $request)
    {
        if (!Zend_Auth::getInstance()->getIdentity())
        {
            $redirect = new Zend_Controller_Action_Helper_Redirector();
            $redirect->gotoSimpleAndExit('login', 'auth');
        }
    }
}

它会重定向并更改为新的URL,但是在浏览器中它会创建一个重定向循环。我想知道问题是否可能源于apache mod_rewrite设置。

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]
RewriteRule ^.*$ index.php [NC,L]

2 个答案:

答案 0 :(得分:6)

请勿在login / auth,上附加该插件;将标准扩展到

if (!Zend_Auth::getInstance()->getIdentity()
     && $this->getRequest()->getControllerName() != 'login'
     && $this->getRequest()->getActionName() != 'auth')

答案 1 :(得分:0)

您必须为登录页面添加例外。否则,它将重定向到自身,导致循环。

因此,如果您的登录页面位于名为“登录”和“索引”操作的控制器中,则需要为该页面添加例外,并且任何其他页面都可以处理该表单。

    if (!Zend_Auth::getInstance()->getIdentity() 
        && $this->getRequest()->getControllerName() != 'login'
        && $this->getRequest()->getActionName() != 'index')
        )
    {
        $redirect = new Zend_Controller_Action_Helper_Redirector();
        $redirect->gotoSimpleAndExit('login', 'index');
    }