Задать вопрос

Как правильно выдавать 404?

Всем привет! Написал какую-никакую cms для собственных нужд, но вот проблема...
У меня в .htaccess прописаны реврайты вроде такого:
RewriteRule ^article/$   /index.php?mode=articles
RewriteRule ^catalog/$   /index.php?mode=section
RewriteRule ^catalog/([0-9a-z_-]{1,32})/$  /index.php?mode=section&tags=$1

Ну и все работает как нужно, но если в адресе прописать что-то несусветное вроде site.ru/sdfgsdfgs/sdfhgsdf/sdfsfdssf/
То без всяких проблем сервер отдает код ответа 200 и показывает главную страницу.
Я понимаю, что структура изначально продумана не правильно, но в какую сторону думать? Какая логика вообще должна быть в таком случае?
  • Вопрос задан
  • 393 просмотра
Подписаться 2 Оценить Комментировать
Решения вопроса 1
Раз уж вы сделали какую-никакую cms, то все-таки советую улучшить ее и
отойти от формирования ссылок в htaccess. Сделайте ЧПУ на чистом PHP и
ваша мобильность не будет иметь границ, а управление ошибками будет
куда примитивней и сведется к обычным логическим конструкциям if else.

Немного погуглил, вот отличная статья о том, как создавать ЧПУ при помощи
PHP. Сначала рассказывается о том, как сделать посредством htaccess, а после
идет как раз то, что вам нужно, начиная с заголовка ЧПУ на PHP и два примера
с разной реализацией.

Не поленитесь и разберитесь с этим :).

А ответ сервера - 404 Not Found, на PHP будет выглядеть вот так:

header("HTTP/1.0 404 Not Found");

Когда человек открывает страницу вашего сайта, у вас должна быть проверка на
существовании этой страницы в вашей базе данных или в файлах. И если нет,
то отдаете ответ сервера 404, а для пользователя выводите сообщение о
несуществовании страницы.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Stalker_RED
@Stalker_RED
У вас ведь в каком-то месте проверяются чему равно "mode", и делается вызов соответствующих модулей.
Вот там-же и выясняется, что sdfgsdfgs/sdfhgsdf/sdfsfdssf на сайте отсутствует. Значит нужно показать 404.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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