Обработчик 404
Обработчик 404
Как обработать 404? У меня не хватает ума. помогите.
На данный момент в случае возникновения ошибку 404, у меня показывается error.php.
Вот но мне бы не хотелось показывать ошибку пользователю. а направить его на индекс, если делаю редирект, то заголовки отправляются 200 OK. Если я правильно понял - это не хорошо. Происковики должны знать что такой страницы нет.
То есть суть такова, нужно показывать другую страницу(редирект или рендер), но заголовки оставить те же 404.
На данный момент в случае возникновения ошибку 404, у меня показывается error.php.
Вот но мне бы не хотелось показывать ошибку пользователю. а направить его на индекс, если делаю редирект, то заголовки отправляются 200 OK. Если я правильно понял - это не хорошо. Происковики должны знать что такой страницы нет.
То есть суть такова, нужно показывать другую страницу(редирект или рендер), но заголовки оставить те же 404.
Re: Обработчик 404
http://www.yiiframework.com/doc-2.0/gui ... onses.html
Отправляйте любой заголовок, какой хотите
Отправляйте любой заголовок, какой хотите
Re: Обработчик 404
На мой взгляд, вам больше подойдет редирект через секунду или меньше. Можно даже без вывода страницы об ошибке, только заголовки.
Но все же, так делать не стоит - 404 ошибка должна быть, иначе пользователь вполне обоснованно будет задаваться вопрос "Что тут происходит?".
Но все же, так делать не стоит - 404 ошибка должна быть, иначе пользователь вполне обоснованно будет задаваться вопрос "Что тут происходит?".
Re: Обработчик 404
в общем, нашел выход из ситуации сдледующий. Расширил класс
в SiteController
как-то так.
Код: Выделить всё
namespace common\exception;
class ErrorAction extends \yii\web\ErrorAction {
....
public function run()
{
....
if($exception->statusCode==404){
return $this->controller->render('view' ?: $controller->id, [ ...]...
}....
}
Код: Выделить всё
public function actions()
{
return [
'error' => [
'class' => 'common\exception\ErrorAction', .....
как-то так.
Re: Обработчик 404
В статусе стоит ошибка .все как надо, во view можно писать - рисовать все что угодно. думается правильно получилось.
Re: Обработчик 404
Код: Выделить всё
if($exception->statusCode==404){
return $this->controller->render('view' ?: $controller->id, [ ...]...
}....
Имхо, лучше все же хедерами:
Код: Выделить всё
header("HTTP/1.0 404 Not Found");
header("Location: " Url::to(['site/index'], true));
Re: Обработчик 404
Почем у костыль ? над функцией header в yii2 есть своя обертка, получается у вас тоже костыль в открытом виде.PaSiS писал(а):Костыль.Код: Выделить всё
if($exception->statusCode==404){ return $this->controller->render('view' ?: $controller->id, [ ...]... }....
Имхо, лучше все же хедерами:Код: Выделить всё
header("HTTP/1.0 404 Not Found"); header("Location: " Url::to(['site/index'], true));
id vs redirect, я бы не сказал, что где-то костыль где-то нет из этого. Я бы сказал, что это 2 разных подхода для решения 2 разных задач.
Re: Обработчик 404
Да, возможно. Но я все же считаю, что 404 должна отдаваться явно.nepster писал(а):Я бы сказал, что это 2 разных подхода для решения 2 разных задач.
Я привел просто пример, псевдокод своего рода, должно быть понятно, что это не полноценное решениеnepster писал(а):над функцией header в yii2 есть своя обертка