Redirect Yii url管理器无限重定向循环

Redirect Yii url管理器无限重定向循环,redirect,yii,infinite-loop,yii-url-manager,Redirect,Yii,Infinite Loop,Yii Url Manager,我被这件事困住了 我有一个Yii项目(yii1.1.14),它在我的本地机器上运行良好(iis7.5和ISAPI重写3,php5.5) 然而,在测试服务器(Linux、Apache2.2、PHP5.5)上,除了重定向之外,其他一切都可以工作。我在主页上得到了一个无限重定向循环,因为登录和索引控制器正在相互重定向(这根本不应该发生) 如果我把登录操作放在url(www.mysite.com/site/login)中,我就可以登录了。但是,如果我在任何控制器操作中执行重定向(例如,在更新一些数据之后

我被这件事困住了

我有一个Yii项目(yii1.1.14),它在我的本地机器上运行良好(iis7.5和ISAPI重写3,php5.5)

然而,在测试服务器(Linux、Apache2.2、PHP5.5)上,除了重定向之外,其他一切都可以工作。我在主页上得到了一个无限重定向循环,因为登录和索引控制器正在相互重定向(这根本不应该发生)

如果我把登录操作放在url(www.mysite.com/site/login)中,我就可以登录了。但是,如果我在任何控制器操作中执行重定向(例如,在更新一些数据之后),我会被抛出到主url,而不是重定向到的路由。 如果我使用.htaccess重写规则,这没有什么区别,所以我猜它一定是Yii中的一些配置与一些apache特定的配置内容相结合

这是我的urlManager配置:

'homeUrl'=>array('/site/index'),
'components'=>array(
    'user'=>array(
        'loginUrl'=>array('site/login'),    
        // disable cookie-based authentication
        'allowAutoLogin'=>false,
        'class'=>'MyWebUser'    
    ),

    'urlManager'=>array(
        'urlFormat'=>'path',
        'showScriptName'=>false,
        'rules'=>array(
            '' => 'site/index',                  
            '<controller:\w+>/<id:\d+>'=>'<controller>/view',
            '<controller:\w+>/<action:\w+>/<id:\d+>'=>'<controller>/<action>',
            '<controller:\w+>/<action:\w+>'=>'<controller>/<action>',
            '<module:\w+>/<controller:\w+>/<action:\w+>'=>'<module>/<controller>/<action>',
        ),
    ),
)
以及导致无限循环的我的站点/登录和站点/索引操作(它们在我的本地计算机上按预期工作):

直接调用路由有效,重定向无效


编辑:当我从
'urlFormat'=>'path'
切换到
'urlFormat'=>'get'
时,路由工作。

而不是
$this->重定向('/site/login')
,尝试使用
$this->重定向(数组('site/login')

我也有类似的问题。在我的情况下,这是由于页面中的错误。它在dev中工作,但在prod中不工作,因为php的配置不同。我得到了无限循环,因为在生产中,我从index.php中删除了调试行,所以出现了错误,它重定向到home,导致了另一个错误,从而重定向到home,导致了错误等等


我通过将调试行投入生产、修复错误并在生产中删除调试行解决了这个问题。当然,在我的例子中,这是预生产,如果您在实际生产中,您可能希望在临时环境中进行所有这些测试,而不是直接在生产中进行。

虽然这似乎是执行重定向的更好方法,但问题仍然是一样的……这是生产服务器上的测试环境,调试模式处于启用状态。。。如果这是一个错误,它也不应该与
'urlFormat'=>'get'
一起工作。。。这确实有效。
Options +FollowSymLinks
RewriteEngine on
RewriteBase /
# if a directory or a file exists, use it directly
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

# otherwise forward it to index.php
# RewriteRule . index.php
RewriteRule ^(.*)\?*$ index.php?$1 [L,QSA]
public function actionIndex()
{
    if(Yii::app()->user->isGuest) {
        $this->redirect('/site/login');
    } else {
        $this->render('index');
    }
}

public function actionLogin()
{
    // redirect to index page if user is already logged in
    if(!Yii::app()->user->isGuest) {
        $this->redirect(Yii::app()->homeUrl);
    }

    $model = new LoginForm;

    // if it is ajax validation request
    if(isset($_POST['ajax']) && $_POST['ajax']==='login-form') {
        echo CActiveForm::validate($model);
        Yii::app()->end();
    }

    // collect user input data
    if(isset($_POST['LoginForm'])) {
        $model->attributes=$_POST['LoginForm'];
        // validate user input and redirect to the previous page if valid
        if($model->validate() && $model->login()) {
            $this->redirect(Yii::app()->user->returnUrl);
        }
    }
    // display the login form
    $this->render('login',array('model'=>$model));
}