什么在 Apache 中执行透明内容协商

What is performing Transparent Content Negotiation in Apache

我继承了一个相当复杂的 Java Web 应用程序,它表现出一种神秘的行为,我需要知道是什么原因造成的。

应用程序请求一个文件file.css。如果 file.css 存在,则返回。如果 file.css 不存在,但 file.css.gz 存在,则返回 gzip 文件,其中包含以下异常 headers:

Content-Location: file.css.gz
Content-Type: application/x-gzip
TCN: choice
Vary: negotiate

TCN header 的存在意味着请求是透明协商的,很可能是由 Apache RewriteRule 协商的,但我找不到规则的定义位置。我找到并搜索了服务器上的每个 Apache 配置文件(多个文件用 Include 引用)和 commented-out 每次提到 "gzip" 或“.gz”。在所有配置文件中,只有一个 RewriteRule,它用于 SSL。重新启动 Apache 后,我仍然无法禁用该行为。

这是 Apache 的默认行为,还是看起来像某个模块的行为?

服务器的OS是RHEL 5.8,Apache是​​2.2。

罪魁祸首是 Apache MultiViews。这是一项令人沮丧的调查,因为配置 MultiViews 不涉及提及 RewriteRule 或它将自动替换的任何文件扩展名。您必须先了解 MultiViews,然后才能理解它是导致此行为的原因。