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.