Mod-Rewrite
如何使無用的 Apache mod_rewrite 日誌消息靜音?
我有一些 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
參考: