Получение мягкой ошибки 404 при перенаправлении на страницу входа в Yii

Я использую Yii 1.1.17, и я заметил на некоторых своих страницах, где хочу, чтобы только зарегистрированные пользователи могли просматривать. Я получаю мягкую ошибку 404 в инструментах для веб-мастеров Google.

Например

http://www.example.com/sell/, когда вы перейдете к http://www.example.com/sell/view, он перенаправит вас на http://www.example.com/login

Сейчас у меня только 240 мягких ошибок 404. Действие просмотра не было настроено только на зарегистрированных пользователей. Но через пару месяцев после запуска моего сайта. Я изменил это. Затем начинают появляться ошибки.

Есть ли способ исправить это? или работа вокруг?

здесь есть accessRules для действия view, которое предназначено только для зарегистрированных пользователей:

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

Вы можете добавить deniedCallback как

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);
    }

Затем вы можете перенаправить любой код состояния, который вы хотите.

Вы можете узнать больше о deniedCallback здесь.

Узнайте больше о redirect здесь

Ответ 2

Простым способом вам просто нужно идентифицировать его с контроллером. Если вы не являетесь пользователем, он автоматически будет переведен на страницу входа в систему. Как показано ниже:

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

Надеюсь, поможет

Ответ 3

вы просто вставляете библиотеку dbmanager/rbac в свои приложения yii,

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