AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 1060839
Accepted
David Scherfgen
David Scherfgen
Asked: 2021-04-20 06:43:15 +0800 CST2021-04-20 06:43:15 +0800 CST 2021-04-20 06:43:15 +0800 CST

Apache:不要为某些不存在的文件(常规文件或符号链接)记录错误

  • 772

我想防止 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 的错误日志中没有看到任何可疑之处。我在这里可能做错了什么?

apache-2.2 symbolic-link mod-rewrite rewritecond
  • 1 1 个回答
  • 230 Views

1 个回答

  • Voted
  1. Best Answer
    MrWhite
    2021-04-20T08:53:34+08:002021-04-20T08:53:34+08:00

    如果您在“错误日志”中收到“文件不存在”消息,那么LogLevel(在服务器配置中设置)可以说设置为“太高”。当然,对于生产服务器来说太高了。“文件不存在”是一条info消息,因此您可能LogLevel info在服务器配置中设置了(或以上)。默认值为LogLevel warn. _

    404(找不到文件)是正常的 HTTP 响应,它不是“服务器错误”。所以,通常情况下,这应该只出现在“访问日志”中,而不是服务器的“错误日志”中。

    以下级别可用,按重要性递减顺序(增加详细程度):

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

    参考:

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

    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已设置。

    • 5

相关问题

  • Apache Django Mod_Wsgi - 自动重新加载应用程序

  • Apache:对多个虚拟主机使用相同的目录指令

  • Apache 上的子域不工作 - 找不到服务器

  • PHP 作为 CGI 还是 Apache 模块?

  • 避免将某些丢失的文件记录到 Apache2 错误日志中

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve