Поддержка Проблемы и решения Когда включены ЧПУ, на отсутствующих (404) страницах заголовки 200ОК.

  • Решено agrr77

    (@agrr77)


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

    Есть проблема с возвратом заголовков сервера 404 на отсутствующей странице.

    С любой отсутствующей страницы сайта сервер отдаёт заголовок 200 ОК. При этом я попадаю на страницу «404 — Страница не найдена!», как и должно быть.

    При этом, проблема наблюдается только когда ВКЛЮЧЕНЫ ЧПУ в WordPress, соответственно в htaccess ДОБАВЛЕН блок:

    <IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /
    RewriteRule ^index\.php$ - [L]
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule . /index.php [L]
    </IfModule>

    При этом, если включить в настройках WP вид ссылок типа «site.ru/?p=123», соответственно, приведенный выше блок из htaccess удаляется, то сервер начинает выдавать корректно 404 на отсутствующие страницы. Но нужны ЧПУ.

    Я пробовал всё удалять из htaccess, оставляя только блок приведенный выше, отключать все плагины и даже устанавливать специальный плагин для 404 страницы (404page — your smart custom 404 error page), который позволяет назначить отдельную страницу, как 404. Назначенная страница выводится, но сервер упорно не отдает заголовок 404, пока этот код в htaccess присутствует и включены ЧПУ.

    При чём, даже если не отключая ЧПУ, просто удалить htaccess, в котором только этот блок кода, то 404 начинает отдаваться корректно. Но тогда, понятно, ссылки не работают, пока не включишь базовые (?p=123).

    Я уже все форумы выкурил и сайты с описанием подобной проблемы. В основном встречается проблема обратная, которая лечится включением ЧПУ и добавлением этого когда в htaccess. У меня же корректно 404 выдаёт только при выключенном ЧПУ.

    Я и всякие костыли пробовал:
    ErrorDocument 404 /404.html в htaccess, создавая в корне 404.html — не работает.

    И подобное в 404.php и для эксперимента в header.php:

    <?php 
    header ("HTTP/1.1 404 Not Found"); 
    ?>

    Всё равно всегда 200ОК — на любую несуществующую страницу.

    Стоят плагины:
    Simple Lightbox
    Google XML Sitemaps
    Contact Form 7
    All In One WP Security
    All In One SEO Pack
    Akismet Anti-Spam
    ну и уже потом появился «404page — your smart custom 404 error page».

    У меня три вопроса:
    1. Куда копать?
    Дополнительные:
    2. Отключение плагинов равно их удалению? То есть, если я их отключил, могу ли я считать, что они не участвуют в жизни WP?
    3. Удаление плагина — точно не оставляет от него следов? Особенно такого, как All In One WP Security?

    Заранее спасибо за помощь!

    PS Даже хостеру написал — безрезультатно. Ответили:

    Для работы ЧПУ в .htaccess необходимы директивы вида:

    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule . /index.php [L]

    Данные директивы перенаправляют все запросы на файл index.php, при включенному ЧПУ адрес запроса обрабатывается средствами скриптов. В данном случае также и ошибка 404 должна отдаваться скриптами сайта, для настройки вам лучше всего обращаться к разработчику.

    • Тема изменена 5 лет назад пользователем agrr77.
Просмотр 1 ответа (всего 1)
  • Автор agrr77

    (@agrr77)

    Не знаю — плакать или смеяться. Всю ночь маялся с этим.
    index.php оказался в кодировке UTF8+BOM
    Нашел скриптиком find_bom.php, есть и другие, но я не пробовал — delbom, bomdel и т.п. Гуглите. Перекодировал в UTF8, и проблема исчезла.

    Надеюсь, помог будущим страдальцам.

Просмотр 1 ответа (всего 1)
  • Тема «Когда включены ЧПУ, на отсутствующих (404) страницах заголовки 200ОК.» закрыта для новых ответов.