Mod-Rewrite

如何使無用的 Apache mod_rewrite 日誌消息靜音?

  • May 30, 2018

我有一些 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

但是請注意,可以使用單個指令設置多個模組(或*所有模組)的日誌級別。*設置LogLeveldebug, trace1..trace8被認為是“調試”級別。級別越高,記錄的消息就越多。

並刪除它,將其註釋掉,或將其設置為預設值:

LogLevel warn

參考:

https ://httpd.apache.org/docs/2.4/mod/core.html#loglevel

引用自:https://serverfault.com/questions/914462