Getting a soft 404 error on redirect to login page in Yii

百般思念 提交于 2019-12-10 12:30:12

问题


I'm using Yii 1.1.17, and i noticed on some of my pages where i want just registered users to be able to view I'm getting a soft 404 error on Google's webmasters tools.

For example

http://www.example.com/sell/ when you go to http://www.example.com/sell/view it would redirect you to http://www.example.com/login

Right now i only have 240 soft 404 errors. The view action was not set to registered users only at first.But after a couple of months after launching my site. I changed it. Then the errors starting poping up.

Is there a way to fix this? or a work around?

here is accessRules for the view action that is only for registered users:

public function accessRules()
    {
        return array(
            array('allow',  
                'actions'=>array('index', 'new'),
                'users'=>array('*'),
            ),
            array('allow',
                'actions'=>array('view'),
                'users'=>array('@'),
            ),
            array('allow',
                'actions'=>array('admin','delete', 'update', 'create','update','upload'),
                'expression'=>'app()->user->isAdmin()',
            ),
            array('deny', 
                'users'=>array('*'),
            ),
        );
    }

回答1:


You could add a deniedCallback as

public function accessRules()
    {
        return array(
            array('allow',  
                'actions'=>array('index', 'new'),
                'users'=>array('*'),
                'deniedCallback' => array($this, 'redirectToLogin'), 
            ),
            array('allow',
                'actions'=>array('view'),
                'users'=>array('@'),
                'deniedCallback' => array($this, 'redirectToLogin'), 
            ),
            array('allow',
                'actions'=>array('admin','delete', 'update', 'create','update','upload'),
                'expression'=>'app()->user->isAdmin()',
                'deniedCallback' => array($this, 'redirectToLogin'), 
            ),
            array('deny', 
                'users'=>array('*'),
                'deniedCallback' => array($this, 'redirectToLogin'), 
            ),
        );
    }

    public function redirectToLogin($user = null, $rule = null){
        Yii::app()->controller->redirect('/login', true, 403);
    }

You can then redirect with whatever status code you'd like.

You can find out more about deniedCallback here.

Find out more about redirect here




回答2:


In a simple way, you just need to identify it to the controller. If not a user login, it will automatically be taken to the login page. Like the example below:

public function actionView($id)
{
    if(!Yii::app()->user->isGuest)
    {   
        $this->redirect(array('/site/login'));
    }
    else
    {
        $this->render('view',array(
        'model'=>$this->loadModel($id),
        ));
    }
}

Hopefully can help




回答3:


you just embed dbmanager / rbac library to your yii apps,

http://www.yiiframework.com/doc-2.0/yii-rbac-dbmanager.html


来源:https://stackoverflow.com/questions/34922203/getting-a-soft-404-error-on-redirect-to-login-page-in-yii

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!