Как я могу перенаправить все ошибки 404 на домашнюю страницу? У меня есть пользовательская страница ошибок, но Google Analytics выдает слишком много ошибок.
Laravel 5.2 Как перенаправить все ошибки 404 на домашнюю страницу
Ответы (2)
Для этого вам нужно добавить несколько строк кода в метод render
в файле app/Exceptions/Handler.php
.
public function render($request, Exception $e)
{
if($this->isHttpException($e))
{
switch (intval($e->getStatusCode())) {
// not found
case 404:
return redirect()->route('home');
break;
// internal error
case 500:
return \Response::view('custom.500',array(),500);
break;
default:
return $this->renderHttpException($e);
break;
}
}
return parent::render($request, $e);
}
У меня с php 7.2 + Laravel 5.8 работает как бос. Я изменил метод рендеринга (app/Exceptions/Handler.php). Поэтому мы должны проверить, является ли исключение HTTP-исключением, потому что мы вызываем метод getStatusCode(), который доступен только в HTTP-исключениях. Если код состояния 404, мы можем вернуть представление (например: errors.404) или перенаправить куда-то или маршрут (домой).
приложение/Исключения/Handler.php
public function render($request, Exception $exception)
{
if($this->isHttpException($exception)) {
switch ($exception->getStatusCode()) {
// not found
case 404:
return redirect()->route('home');
break;
// internal error
case 500:
return \Response::view('errors.500', [], 500);
break;
default:
return $this->renderHttpException($exception);
break;
}
} else {
return parent::render($request, $exception);
}
}
Для тестирования: добавьте abort(500); где-то в потоке вашего контроллера для просмотра страницы/маршрута. Я использовал 500, но вы можете использовать один из кодов ошибок: Abort(404)...
abort(500);
При желании мы можем предоставить ответ:
abort(500, 'What you want to message');