Laravel 5.2 Как перенаправить все ошибки 404 на домашнюю страницу

Как я могу перенаправить все ошибки 404 на домашнюю страницу? У меня есть пользовательская страница ошибок, но Google Analytics выдает слишком много ошибок.


person Buglinjo    schedule 01.03.2016    source источник
comment
Какие ошибки вы получаете?   -  person Fester    schedule 01.03.2016
comment
К сожалению, страница, которую вы ищете, не может быть найдена.   -  person Buglinjo    schedule 01.03.2016


Ответы (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);      
}
person shahalpk    schedule 01.03.2016

У меня с 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');
person LuizEduardoMPF    schedule 07.11.2019