Получение мягкой ошибки 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