Apache сообщает о статусе 200 для несуществующих URL-адресов WordPress

WordPress .htaccess обычно имеет следующие правила переписывания:

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

Когда я получаю доступ к несуществующему URL на моем веб-сайте, это правило перезаписи срабатывает, перенаправляет на index.php и подает мой пользовательский файл шаблона 404.php. Код состояния, который возвращается клиенту, является правильным 404, как показано в этом примере вывода HTTP Live Headers:

http://www.borngeek.com/nothere/

GET /nothere/ HTTP/1.1
Host: www.borngeek.com
{...}

HTTP/1.1 404 Not Found

Однако Apache сообщает обо всем обмене с кодом состояния 200 в журнале моего сервера, как показано здесь во фрагменте журнала (обрезано для простоты):

{...} "GET /nothere/ HTTP/1.1" 200 2155 "-" {...}

Это имеет некоторый смысл для меня, поскольку исходный запрос был перенаправлен на существующую страницу (index.php). Есть ли способ заставить Apache сообщить об обмене как 404?

Моя проблема в том, что поддельные запросы, поступающие от плохих парней, отображаются как "успешные запросы" в различных программах по статистике серверов, которые я использую (AWStats, Analog и т. Д.). Я бы хотел, чтобы они отображались на стороне Apache как 404, чтобы они отфильтровывались из генерируемых статистических отчетов.

Я попытался добавить следующую строку в мой.htaccess, но это не дало эффекта (я думаю, по той же причине, что и предыдущие правила перенаправления):

ErrorDocument 404 /index.php?error=404

У кого-нибудь есть умный способ исправить это раздражение?

Дополнительная информация:

  • ОС Debian 6.0.4, а версия Apache выглядит как 2.2.22-3 (размещена на DreamHost)
  • 404, отправляемый обратно клиенту, устанавливается WordPress (т.е. я не вызываю вручную header() в любом месте)

2 ответа

Решение

Попробуйте изменить [L] в [R=404,L] в вашей строке RewriteRule. Это отправит 404 клиенту и вашему серверу лог. Чтобы избежать отображения страницы ошибки по умолчанию, вы можете использовать ErrorDocument 404 /index.php?error=404 сделать попытку создания ErrorDocument, о котором вы говорили, что пытались раньше.

Вы также можете использовать плагин WP htaccess Control для управления файлами htaccess при обновлении.

Если вы можете отредактировать шаблон - вам повезет - в этом случае - отредактируйте его так, чтобы вывести 404 или любой другой код. Как apache, его регистрация происходит (в большинстве случаев) после PHP - эти коды состояния выбираются в журнале в общих настройках (хотя есть множество исключений).

Смотрите http://php.net/manual/en/function.header.php

Dw.

Другие вопросы по тегам