我已经在RedHat 6.4服务器上从Apache 2.2升级到2.4,并遇到了mime类型的问题。
Apache有一个DefaultType Directive。在Apache 2.2中,我将其设置为“text / plain”。我有一个网页,列出给定目录中的所有文件,用户可以单击查看文件。此目录包含所有类型的不同文件扩展名和一些没有扩展名的文件。单击文件时,它将在一个格式良好的新窗口中打开。没有任何代码这样做。严格来说,浏览器打开文件并根据其内容类型决定要做什么。
此指令已在Apache 2.4中禁用。 Apache文档网站指示用户使用mime.types配置文件和AddType Directive来配置媒体类型。
我的问题是如何将“text / plain”mime类型分配给没有扩展名的文件?在Apache 2.2中,默认情况下,这些文件将通过DefaultType指令赋予“text / plain”内容类型。在Apache 2.4中我无法弄清楚如何执行此操作,因为我不能再使用此指令了。我不想使用ForceType Directive,因为它会覆盖其他已定义的mime类型。
我可以创建一个加载文件并分配内容类型的php包装器,但我更愿意将逻辑保存在apache中,其中所有其他mime类型定义都位于其中。
任何帮助将不胜感激。如果需要其他信息,请告诉我。
答案 0 :(得分:9)
此解决方案仅影响无扩展,静态提供的文件:( credit Eugene Kerner)
<FilesMatch "^[^.]+$">
ForceType text/plain
</FilesMatch>
这个会影响在没有Content-Type
标头的情况下传输的任何响应。换句话说,它模仿旧DefaultType
指令的行为:
Header set Content-Type "text/plain" "expr=-z %{CONTENT_TYPE}"
应该可以在这里使用setifempty
而不是-z
表达式。但它失败并覆盖每个响应中的标题,空或不。我不知道为什么。 Eric Covener说这是因为Content-Type
标题未添加到“最后一秒”。