2012-07-27 101 views
1

我已经将我的Yii应用程序上传到运行PHP5和Apache2.x的Ubuntu 12.04服务器。 .htaccess文件包含:Yii登录返回HTTP 404

​​

的UserController.php在/保护/控制器包含:

public function actionLogin() 
{ 
    $model= new Users(); 

    // if it is ajax validation request 
    if(isset($_POST['ajax'])) 
    { 
     echo CActiveForm::validate($model); 
     Yii::app()->end(); 
    } 
//    print_r($_POST['Users']); 
    // collect user input data 
    if(isset($_POST['Users'])) 
    { 
     $model->attributes=$_POST['Users']; 


     // validate user input and redirect to the previous page if valid 
     if($model->login()) 
      $this->redirect(Yii::app()->user->returnUrl); 
    } 
    // display the login form 
    $this->render('login',array('model'=>$model)); 
} 

当我登录到该网站,我收到一个HTTP404消息。 apache2 error.log状态

file does not exist /var/www/users 

如何纠正这个404错误?

更新:
它似乎没有看到returnURL的价值。如何设置returnUrl以便用户重定向回到上一页?

UPDATE2: 下面是配置/ main.php一个片段:

'urlManager'=>array(
     'urlFormat'=>'path', 
     'showScriptName'=>false, 
     'rules'=>array(
      '<controller:\w+>/<id:\d+>'=>'<controller>/view', 
      '<controller:\w+>/<action:\w+>/<id:\d+>'=>'<controller>/<action>', 
      '<controller:\w+>/<action:\w+>'=>'<controller>/<action>', 
     ), 

这里的主要.htacess文件的内容:

RewriteEngine On 
RewriteBase/

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^admin/(.*)\?*$ admin.php/$1 [L,QSA] 

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.*)\?*$ index.php/$1 [L,QSA] 

php_value upload_max_filesize 20M 
php_value post_max_size 21M 

UPDATE: 它看起来像根原因可能与用于认证的UserIdentity类有关。下面是用户模型的一个片段:

public function login() 
{ 

     if($this->_identity===null) 
     { 
       $this->_identity=new UserIdentity($this->username,md5($this->password)); 
       $this->_identity->authenticate(); 
     } 
     if($this->_identity->errorCode===UserIdentity::ERROR_NONE) 
     { 
       $duration=$this->rememberMe ? 3600*24*30 : 60*20; // 30 days 
       Yii::app()->user->login($this->_identity,$duration); 
       return true; 
     } 
     else{ 
       $this->addError('password','Incorrect username or password.'); 
       return false; 
     } 
} 

难道是建议使用的UserIdentity的CdbHttpSession INSEAD完成登录?

+0

你有什么returnlUrl设置在用户模块? – ernie 2012-07-27 19:24:00

+0

我似乎无法找到它。那会在用户模型中吗? – SidC 2012-07-27 20:10:56

回答

1

我认为你的.htaccess和Yii主配置有问题。

http://www.yiiframework.com/doc/guide/1.1/en/topics.url

我认为,如果你有设置你的config/main.php正确(可你把更新的问题,特别是urlManager部分),你的.htaccess必须

 
RewriteEngine on 

# 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 
0

尝试改变

$this->redirect(Yii::app()->user->returnUrl); 

$this->redirect(Yii::app()->user->getReturnUrl(Yii::app()->homeUrl)); 

HTH

+0

修改此行无效:( – SidC 2012-07-28 20:35:15

+0

另一种选择是放入你想要的默认url在Yii :: app() - > user-> getReturnUrl() – nvwd 2012-07-28 21:35:18

+0

这将只是'index.php '? – SidC 2012-07-28 21:39:48

0

您明确可以通过设置RETURNURL:

Yii::app()->user->setReturnUrl('controller/action');

如果你把它是你的,我可能会设置在components/userIdentity.php类,当你验证密码等,或者你可以在你的$model->validate()方法中设置它。