У меня есть несколько правил mod_rewrite для перенаправления нежелательных запросов, сделанных ботами, на статическую страницу 404, например:
RewriteRule ^(.*)\.asp(.*)$ https://%{SERVER_NAME}/errors/404.html [L,R=301,NC]
У меня есть несколько десятков таких правил. Однако, просмотрев мой журнал ошибок Apache, я вижу, что для каждого отдельного запроса создается запись журнала для каждого отдельного правила, например:
[Wed May 30 10:52:59.740327 2018] [rewrite:trace3] [pid 2021:tid 140011088312064] mod_rewrite.c(476): [client 10.91.178.131:62065] 10.91.178.131 - - [example.com/sid#7f56e5f7bc18][rid#7f56dc0100a0/initial] applying pattern '^(.*)\\.asp(.*)$' to uri '/admin/', referer: https://example.com/admin/record/149/
Почему Apache применяет каждое правило к каждому URL-адресу, когда они явно не совпадают? Это увеличивает мой журнал ошибок и делает практически невозможным поиск фактических сообщений об ошибках. Как мне остановить это или, по крайней мере, остановить Apache от спама в файле журнала с этими записями?
Почему Apache применяет каждое правило к каждому URL-адресу, когда они явно не совпадают?
Это не обязательно применение правила, это проверка того, следует ли его применять, и для этого предназначена эта запись журнала «отладки». Этот дополнительный уровень ведения журнала не включен по умолчанию - кто-то явно включил его в конфигурации сервера и, по-видимому, (случайно) оставил его включенным. Это никогда не должно быть включено постоянно на рабочем сервере.
На Apache 2.4+ найдите LogLevel
в конфигурации вашего сервера / виртуальном хосте. Например:
LogLevel rewrite:trace3
Обратите внимание, однако, что можно установить уровень журнала нескольких модулей (или все модули) с помощью одной директивы. Установка LogLevel
к debug
, trace1
.. trace8
считается уровнем «отладки». Чем выше уровень, тем больше сообщений регистрируется.
И либо удалите его, либо закомментируйте, либо установите значение по умолчанию:
LogLevel warn
Ссылка:
https://httpd.apache.org/docs/2.4/mod/core.html#loglevel