@redcap152

Как сделать переадресацию всех несуществующих страниц на определённый url в Yii2?

Здравствуйте! Возник вопрос по поводу обработки ошибки 404 в фреймворке Yii2.
Если набрать URL вида www.site.ru/xxx , где xxx- несуществующая страница сайта site.ru, то вместо страницы 404 появляется это:
exception 'yii\base\InvalidRouteException' with message 'Страница не найдена: site/error' in site.ru/framework/vendor/yiisoft/yii2/base/Controller.php:122
Stack trace:
#0 site.ru/framework/vendor/yiisoft/yii2/base/Module.php(455): yii\base\Controller->runAction('error', Array)
#1 site.ru/framework/vendor/yiisoft/yii2/web/ErrorHandler.php(80): yii\base\Module->runAction('site/error')
#2 site.ru/framework/vendor/yiisoft/yii2/base/ErrorHandler.php(95): yii\web\ErrorHandler->renderException(Object(yii\web\NotFoundHttpException))
#3 [internal function]: yii\base\ErrorHandler->handleException(Object(yii\web\NotFoundHttpException))
#4 {main}
Previous exception:
exception 'yii\base\InvalidRouteException' with message 'Запрашиваемая страница не найдена "pagejgh".' in site.ru/framework/vendor/yiisoft/yii2/base/Module.php:461
Stack trace:
#0 site.ru/framework/vendor/yiisoft/yii2/web/Application.php(83): yii\base\Module->runAction('pagejgh', Array)
#1 site.ru/framework/vendor/yiisoft/yii2/base/Application.php(375): yii\web\Application->handleRequest(Object(yii\web\Request))
#2 site.ru/index.php(14): yii\base\Application->run()
#3 {main}
 
Next exception 'yii\web\NotFoundHttpException' with message 'Запрашиваемая страница не найдена "xxx".' in site.ru/framework/vendor/yiisoft/yii2/web/Application.php:95
Stack trace:
#0 site.ru/framework/vendor/yiisoft/yii2/base/Application.php(375): yii\web\Application->handleRequest(Object(yii\web\Request))
#1 site.ru/index.php(14): yii\base\Application->run()
#2 {main}

Также есть URL с 404-ой страницей - www.site.ru/404
Как сделать так, чтобы при наборе несуществующего URL адреса происходила автоматическая переадресация на www.site.ru/404 ?
  • Вопрос задан
  • 1515 просмотров
Пригласить эксперта
Ответы на вопрос 3
@karminski
Senior React.JS Developer
У вас не определен экшн actionError в контроллере SiteController. Например, так:

public function actionError()
    {
        /* @var HttpException $exception */
        $exception = \Yii::$app->getErrorHandler()->exception;

        return $this->render('errors/' . $exception->statusCode, [
                'name' => '',
                'message' => $exception->getMessage(),
                'exception' => $exception,
            ]);
    }


И не забудьте добавить соответствующие view, например, errors/404.php для данного примера.
Ответ написан
Комментировать
qonand
@qonand
Software Engineer
Для изменения отображения страницы с 404 ошибкой переопределите экшен который за это отвечает.
Более подробно можно почитать здесь
Ответ написан
Комментировать
@mazaevdmitry
В config->main.php у urlManager можно настроить rules
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы