Ошибка 404 на 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 для генерации ответа. Об этом я писал вот здесь: [URl url="https://help-wp.ru/seo-wordpress-kak-otpravit-oshibku-404-s-php-chasti/"]404 c php[/URL]

Если мне удастся решить проблему с 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 буду рад вас выслушать. Обращайтесь, пишите комментарии, жмите лайк.

Комментарии к записи «Ошибка 404 на htaccess»:
  1. Максим:

    ПРивет очень круто искал долго решения. Но почему то оно мне не помогло идет все равно редирект на главную. Ситуация следующая сайт спамят беками на страницы моего сайта - site.ru/?page=(-url-) (все время разные сайты). Использовал код # BEGIN WordPress

    RewriteCond %{QUERY_STRING} ^.*page=.*
    RewriteRule . - [R=404,L,NC]
    RewriteEngine On
    RewriteBase /
    RewriteRule ^index\.php$ - [L]
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d

    RewriteRule . /index.php [L]

    # END WordPress
    # END WordPress

    Но при переходе на страницу site.ru/?page=(-url-) почему то переход идет на мою главную страницу. Подскажите может чтото сделать или кто-то знает. Спасибо.

    • admin:

      Добрый день.
      Вы видимо эту часть упустили ErrorDocument 404 /error.html

      + у вашем случаи не важно будет там 301 или не будет, можно смело через 301 редирект то же самое делать, на страницу вашсайт/404 или любую другую, хотя должно и через ошибку 404 получится

    • Максим:

      Сделал так:

      RewriteEngine On
      RewriteBase /
      RewriteRule ^index\.php$ - [L]
      RewriteCond %{REQUEST_FILENAME} !-f
      RewriteCond %{REQUEST_FILENAME} !-d
      ErrorDocument 404 /error.html
      RewriteCond %{QUERY_STRING} ^.*page=.*
      RewriteRule . - [R=404,L,NC]
      RewriteRule . /index.php [L]

      Не работает)
      Поставил 301
      Redirect 301 /?page=http://(-url-) (-url-)
      Также все равно на главную.

    • admin:

      Ваш код должен быть выше ВП - шного.
      Больше ничего не подскажу, так как чтоб понимать больше нужно смотреть конкретный сайт изнутри.

  2. Андрей:

    Здравствуйте.. понравилась статья..но у меня другой вопрос. Блог на ВП, а как сделать чтобы переводило на ошибку 404 со страниц с регистром HTTPS ..Просто у меня не получилось из-за сложности шаблона перейти на этот регистр но Яндекс уже успел проиндексировать и склеить зеркала, и теперь пользователи переходя по ссылке с поисковика натыкаются на фразу "Соединение не защищено" и т.п. а так хотя бы на блог с предложением других статей попадали (у меня так настроена при ошибке 404) ..Спасибо за ответ.

    • admin:

      Добрый день.
      Я никогда такого не делал и сейчас нет времени тестировать, но мне кажется вот такой вариант в htaccess должен работать.
      Предположим что у вас за 404 отвечает страница вашсайт/404/, вы хотите чтоб она была без http, код ниже должен работать но я не уверен, может и не работать:
      RewriteEngine on
      RewriteCond %{HTTPS} on
      RewriteCond %{REQUEST_URI} ^/404.*
      RewriteRule ^(.*)$ http://%{HTTP_HOST}/%{REQUEST_URI}? [R=301,L]

      ну или в этом направлении нужно двигаться. Там единственный момент что ВП может вмешаться и все равно менять на https и тогда будет зацикливание

  3. Юрий Маслов:

    SOS
    Не могу победить

    .htaccess

    php_flag register_globals on
    RewriteEngine on
    RewriteRule ^([-,0-9,a-z]+)$ /index.php?area=1&p=static&page=$1

    Стандартное сообщение с перенаправлением на главную

    Создал new404 (-url-)

    Если вместо $1 вставляю new404, то все ссылки идут только на неё.

    Помогите, пожалуйста, задействовать при ошибке 404 перенаправление на new404 и убрать стандартное сообщение.

    • admin:

      Немного не понял что вам нужно сделать. Пробовали код вставлять из этой статьи, он 100% рабочий под ВП я проверял.

    • Юрий Маслов:

      index.php?area=1&p=static&page=new404
      Поставил, но на него реагируют только ссылки с любым или несуществующем расширением.
      У меня страницы без расширения вызываются.
      У меня Koobi.
      Мне нужно перенаправление на (-url-)

    • Юрий Маслов:

      ErrorDocument 404 /index.php?area=1&p=static&page=new404

    • Юрий Маслов:

      Оказывается, что проблема состоит не в том, чтобы корректно настроить правила в конфигурационном файле .htaccess , а в том, что при запросе несуществующих страниц на сайте вместо 404 кода отдается 200

    • admin:

      Ответ 404 можно же дать на ПХП, вот описывал https://help-wp.ru/seo-wordpress-kak-otpravit-oshibku-404-s-php-chasti/

      остается только скомбинировать ваш хтаццес и этот ответ

    • Юрий Маслов:

      У меня страницы tpl.
      При вставке ПХП получается

  4. Александр:

    Здравствуйте!

    Выше Вы показали пример, как отдать ошибку 404 странице с урлом типа "/?more=1"
    А подскажите пожалуйста, что нужно прописать в .htaccess, чтобы ошибка 404 присваивалась не только "/?more=1", а всем страницам, содержащим в себе идентификатор "/?more=".

    То есть, и "/?more=1", и "/?more=2", и "/?more=3" и так далее...

    Заранее спасибо.

    • admin:

      Добрый день.
      Все остается как есть, только меняем первую строчку с такого варианта

      RewriteCond %{QUERY_STRING} ^.*more=1.*

      на вот такой:
      RewriteCond %{QUERY_STRING} ^.*more=.*

      Если посмотреть документацию, то .* это любое количество любых символов 🙂

  5. Ольга:

    Будьте добры, как сделать, чтобы вместо главной страницы при любом ошибочном урл был код 404. Я понимаю, что в Hhtaccess надо прописывать конкретную страницу? А что делать в моем случае?

    • admin:

      Добрый день.
      О какой ЦМС мы сейчас говорим? - если ВП то он автоматически это делает, ничего никуда не нужно прописывать

  6. Сергей:

    Не знаю с какого источника вы нашли этот пример, но он реально работает. Получается чистая ошибка 404 на htaccess без редиректов и ошибок 302. Большое вам спасибо.

  7. Никита:

    Да вы я смотрю прям извращенец. Всякое встречал, но чтоб через такую за....цу делать ошибку 404 еще не видал.
    Не проще из пхп послать код 404 ???

  8. Ден:

    1) У меня нет .htaccess
    2) Как сделать так, чтобы при переходе на не известную ссылку сайта, допустим: (-url-) - выдавала страница 404.html. У меня открывается, но только с такого: (-url-). А я хочу чтобы выдавала на всех длинных неизвестных стр. как допустим: (-url-)... -Понимаете?

    Что можно в код добавить? (Пробовал добавить такие как в конце: ... -не пойдет.)

    • admin:

      Добрый день.
      Никто не мешает создать файл .htaccess Создавать нужно в корне сайта. Винде может не понравится такое имя, лучше воспользоваться или панелью хостинга или тоталом или файлзилой.
      Если у вас ВП то решение проблемы в последнем абзаце

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

      Только privet-mir замените на свое bla.

      Если не ВП то используйте 301 редирект

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

    • Ден:

      1) .htaccess с панели сервера не создается, точнее создается, но она сразу исчезает. (создаю новый файл > переименовываю > сохраняю, а она выдает ошибку) - ОК.

      2) Созданный файл с компа на NotePade++ - .htaccess при переносе на Cpanel > Pablic... - Тут же исчезает, искал во всех папках, и не нашел.

      3) Создал 404.html по другой схеме, но она работает только при переходе в неизвестную стр.сайта к примеру: 111.ru/sddfg - Здесь выдаст 404 файл, но если написать 111.ru/sddfg/fgb - то 404 файл не появляется. Пытался итак и так, но без результатно.

    • admin:

      Вот тут https://help-wp.ru/seo-wordpress-kak-otpravit-oshibku-404-s-php-chasti/ описанно как сделаь ответ 404 на пхп. Думаю в вашей ситуации это единственно правильное решение. Нужно только найти кто принимает на себя неправильные страницы

  9. Илья:

    Не плохое решение, автору респект. Сам хотел придумать и заставить WordPress правильно отдавать 404 ошибки на htaccess но чет не получалось. Собственно мудрил как и вы но не придумал что делать с 302 ошибой. По сути я вместо 404 получал 302 и это очень плохо, вам подтвердит любой нормальный сеошник. Это все равно что сделать запрет на директорию, она как бы есть но поисковики ругаются, хотя страницу можно закрыть и так :))))))

  10. Маринчик:

    На пхп ошибка 404 делается намного проще. Зачем тогда выдумывать велосипед и делать ошибки 404 на htaccess ?? Какая в этом логика. С точки зрения СЕО 404 ошибка она и в африке 404, как не крути. Ведь так?

Сделать заказ
Онлайн помощь по WordPress