Htaccess 404 редирект как правильно – Как задать условие в htaccess чтобы если в урл после второго слеша есть что либо редиректило на 404?

Ошибка 404 в ответе url на htaccess

Сегодня хочу поднять тему создания 404 ошибки средствами apache через файл .htaccess . Я уже расказывал вам о том, как можно создать ошибку 404 на php, а так же о том как сделать 301 редирект на htacces, - пришло время рассказать о htaccess 404 ошибка. В этом уроке попробуем сделать htaccess 404 redirect таким образом, чтоб ошибка 404 была видна сразу, без 301 и 302 редиректа и без использования PHP, чтоб не нагружать его.

Коненчо эта тема мусолилась в сети не один раз и не один блогер расказывал о такой функции файла конфигурации веб сервера апаче. Я хочу описать сам механизм ответа ошибки 404 для любой страницы, точнее для определенного url или для их группы.

Редирект 404 на htaccess

Это не опечатка, действительно ошибка 404 создается аналогично 301 редиректу в .htaccess но с некой оговоркой.

Предположим, что у нас на сайте есть ненужные ссылки с GET параметрами, например ваш_сайт/?more=1 и мы хотим запретить их показывать отдав ошибку 404 в ответ.

Нажмите, чтобы посмотреть код

RewriteCond %{QUERY_STRING} ^.*more=1.*
RewriteRule . - [R=404,L,NC]

Забрасываем этот код в файл htaccess в корне вашего сайта WordPress и смотрим результат:

htaccess перенаправление на 404Вот так вот, браузер получает ошибку 404 через redirect. Аналогичное сообщение получит и поисковый бот и через время выбросит этот url из своего кеша.

Если вам нужно заблокировать какую нибудь страницу WordPRess, например ваш_сайт/privet-mir/, можно написать код вот такого плана:

RewriteCond %{REQUEST_URI} ^/privet-mir.*
RewriteRule . - [R=404,L,NC]

Результат работы предсказуемый:

404 редирект htaccess

 

Я тестировал этот результат только на CMS WordPress, если у вас не получается использовать 404 редирект htaccess на другой системе управления не стоить расстраиваться, по всей видимости код для них может быть похожий. Как альтернатива попробуйте вот такой код:

RewriteCond %{REQUEST_URI} ^/indent/.*
RewriteRule ^(.*)$ [R=404]

Он не работает на вордпресс, но работает на сайтах без системы управления контентом.

Ошибка 404 htaccess

Если вы внимательно тестировали результат работы, то наверное заметили вот эту дурацкую ошибку:

htaccess 404 ошибка

Получается вместо стандартной страницы ошибки 404 в WordPress - мы видив вот это не пойми что. Ситуацию нужно исправлять, ведь любой заказчик нас заплюет слюной за вот такие htaccess 404 redirect 🙂 . И что самое главное тут он абсолютно прав, любой пользователь увидев такое чудо развернется и убежит очень и очень далеко.

Как указать страницу ошибки 404 на htaccess

Для того, чтоб указать какая страница отвечает за обработку 404 ошибки мы можем написать вот такой код перед вызовом нашей ошибки:

ErrorDocument 404  http://vash_sayt/404/

Полный код будет выглядеть приблизительно вот так тогда:

Развернуть код ниже

ErrorDocument 404  http://vash_sayt/404/
RewriteCond %{REQUEST_URI} ^/privet-mir.*
RewriteRule . - [R=404,L,NC]

И тут как говорится за что боролись, на то и напоролись:

htaccess 404 redirectПеред ошибкой 404 мы получаем ошибку 302 и это как говорят СЕО шники очень плохо. В общем если ваш заказчик не СЕО специалист этот вариант прокатит, в альтернативном варианте надо использовать PHP для генерации ответа. Об этом я писал вот здесь: 404 c php

Если мне удастся решить проблему с htaccess 404 redirect 302 я обязательно напишу вам об этом в этой же теме. На данный момент решение проблемы не найдено. Решение есть, описал его ниже.

Аналогично можно было не придумывать каруселей и сделать 404 редирект на htaccess через 301 редирект, разницы по сути никакой, только проще и быстрее:

RewriteCond %{REQUEST_URI} ^/privet-mir.*
RewriteRule ^(.*)$ http://%{HTTP_HOST}/404/? [R=301,L]

По сути задача сделать саму ошибку 404 превратилась в банальное перенаправление на 404. Будем искать варианты.

Решение проблемы 302 перенаправления при ответе 404

Возможно мой код покажется вам громоздким, но единственный способ, который я смог придумать для того, что удалить 302 редирект перед ошибкой 404 - и выглядит это дело вот так:

ErrorDocument 404 /error.html
RewriteCond %{REQUEST_URI} ^/privet-mir.*
RewriteRule . - [R=404,L,NC]

В корне сайта создаем файл "error.html" и туда забрасываем хтмл код, который генерирует ваш сервер WordPress. Вот результаты работы:

htaccess-404-not-302и вот же правильная страница ошибки без редиректа 302:

htaccess-echo-404

Как вы поняли, проблему мы смогли решить благодаря тому, что не использовали полный путь к файлу в этой директиве ErrorDocument 404 /error.html 🙂 

Теоретически на этом все. Теперь вы знаете как делается ошибка 404 на htaccess.

Если вы имеете другие решения htaccess 404 redirect или перенаправление на 404 без редиректа 301 и 302 буду рад вас выслушать. Обращайтесь, пишите комментарии, жмите лайк.

Секреты настройки файла .htaccess | Stebnev Studio