Apache-2.2

Apache:不要為某些不存在的文件(正常文件或符號連結)記錄錯誤

  • April 19, 2021

我想防止 Apache 為某些經常請求的不相關的不存在文件記錄“文件不存在”錯誤,例如“apple-touch-icon-120x120.png”。這些日誌條目使我的日誌雜亂無章,很難看到“真正的”問題。這就是我想出的:

RewriteCond %{REQUEST_URI} ^/apple-touch-icon(-\d+x\d+)?(-precomposed)?\.png$
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-l
RewriteRule ^ - [redirect=404]

想法:如果請求的文件不是正常文件並且也不是符號連結,則 RewriteRule 將導致錯誤不被記錄。那種作品

現在我面臨以下問題:如果我實際上創建了一個名為“apple-touch-icon-120x120.png”的符號連結,那麼我的 RewriteRule 仍然會觸發並且我得到 404。沒有規則或當我將文件設為正常文件時文件而不是符號連結,則該文件已正確提供。我認為通過使用**!-l標誌,只有在請求的文件不是正常文件並且**它也不是符號連結時,我才能觸發我的規則。但這似乎不起作用…

我在 Apache 的錯誤日誌中沒有看到任何可疑之處。我在這裡可能做錯了什麼?

如果您在“錯誤日誌”中收到“文件不存在”消息,那麼LogLevel(在伺服器配置中設置)可以說設置為“太高”。當然,對於生產伺服器來說太高了。“文件不存在”是一條info消息,因此您可能LogLevel info在伺服器配置中設置了(或以上)。預設值為LogLevel warn. _

404(找不到文件)是正常的 HTTP 響應,它不是“伺服器錯誤”。所以,通常情況下,這應該只出現在“訪問日誌”中,而不是伺服器的“錯誤日誌”中。

以下級別可用,按重要性遞減順序(增加詳細程度):

emerg
alert
crit
error
warn    (default)
notice
info    "File does not exist" messages
debug
trace1
trace2
:

參考:


RewriteCond %{REQUEST_URI} ^/apple-touch-icon(-\d+x\d+)?(-precomposed)?\.png$
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-l
RewriteRule ^ - [redirect=404]

是的,如果在目錄上下文中使用,如果請求未映射到文件或符號連結,這將防止“錯誤日誌”中出現“文件不存在”消息。但是,這不是解決此 IMO 的正確方法。使用上述LogLevel指令。

如果您在伺服器虛擬主機上下文中使用它,那麼它將無條件地提供 404(這可能是您遇到的情況?儘管您說它適用於“正常文件”?),因為請求尚未映射到文件系統在這個階段,所以REQUEST_FILENAME仍然是 URL-path(所以條件!-f!-l總是成功的)。在這種情況下,您需要使用前瞻,即。%{LA-U:REQUEST_FILENAME}.

您還需要確保Options +FollowSymLinks已設置。

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