Как получить 404 код? Laravel выдает код ответа сервера 500 вместо 404
Проблема: Когда открываешь 404 страницу или любую другую несуществующую, сервер выдает код ответа 500, вместо 404. Решение очень простое, нужно было всего лишь изменить одну строчку запроса к базе данных.
Проблема: Код ответа сервера 500 вместо 404. Как получить 404 код ошибки?
Когда открываешь 404 страницу или любую другую несуществующую, сервер выдает код ответа 500, вместо 404.
А для SEO нам особенно важно получить код ответа сервера, который соответствует состоянию страницы.
Давайте посмотрим с точки зрения поисковиков на данную ситуацию.
Если пользователь ошибся адресом страницы, а ему сервер выдает 500 ошибку, вместо 400.
Поисковые роботы это фиксируют и считывают это так, что пользователь отправил правильный запрос на страницу, а сервер не смог выполнить его запрос.
В таком случае, роботы поставят вашему сайту «минус», а вам такая ситуация не нужна.
Если пользователь ошибся страницей и получил код ошибки 404, то поисковый робот считает эту ситуацию как ошибку клиента и вашему сайту это не зачтется как «минус».
Решение
Проблема была в способе получения записи из базы данных.
Запись из БД вытаскивалась таким способом и причина ошибки в данной записи:
$post = Post::where('slug', $slug)->first();
И что происходило. Пользователь вводит несуществующую страницу, а сервер этого не понимает и продолжает ее обрабатывать, искать в базе данных соответствующую запись.
Но запрос он выполнить не может, ведь такой записи нет и он выдает 500 ошибку и сообщает, что Trying to get property 'id' of non-object.
То есть проблема заключалась в том, что запрос не останавливался, а его надо остановить и выдать 404 ошибку на том моменте, когда происходит первый запрос к базе данных.
Поэтому, вместо выше указанной строчки, нужно написать
$post = Post::where('slug', $slug)-> firstOrFail();
firstOrFail() - возвращает первую запись, найденную в базе данных. Если подходящей модели не существует, выдается ошибка.
first() - возвращает первую запись, найденную в базе данных. Если подходящей модели не существует, возвращается null.