Apache2:使用符号链接的目标名称进行 Content-Type 映射

Apache2:使用符号链接的目标名称进行 Content-Type 映射

我正在开发一个 Web 应用程序,需要在静态 URL 上提供大量不断更新的文档,但文档的 Content-Type 不同(要么是 JPEG,要么是 SVG)。如果文档是符号链接,则链接末尾的文件具有正确的 MIME 类型映射文件扩展名,但我不知道是否可以在查找 MIME 表中的扩展名之前让 Apache 跟踪该链接。

这个问题问同样的问题,但是提供的解决方法对我来说不起作用,因为如果我提供 image/jpeg,浏览器不会自动检测 SVG(它们会自动检测 GIF 和 PNG),所以我需要一个合适的 MIME 类型。

通常情况下,我会使用 .meta 文件和mod_cern_meta为此,但我的目标 Linux 发行版(Fedora 19/20、RHEL 7)没有附带此功能,我想避免自己提供它。我认为我不能使用 mod_headers,因为它需要我重写整个 .htaccess 文件(文件会逐个更改),也不能使用 mod_asis,因为数据文件本身是使用第三方工具生成的。

编辑:我通过将文件写为类型映射(仅包含一个条目)来解决这个问题,指向实际资源并列出其内容类型。这意味着必须编写额外的文件,但使用 mod_meta 也是如此。目前效果还不错。

答案1

你有没有尝试过mod_mime_magic? 启用此模块后,apache 可以按照与“文件”命令相同的方式猜测内容类型,并正确设置内容类型标头。

检查 centos httpd 安装的默认配置,mod_mime_magic 似乎默认启用,并且当(例如)请求针对 .png 文件的符号链接(即“aaaa”)时,内容类型设置正确。

另外,请确保您有跟随符号链接为包含符号链接的根目录启用选项(或仅为整个 documentroot 启用它)

lrwxrwxrwx  1 root   root       10 Jan 15 16:27 aaa -> pgid35.png
-rw-r--r--  1 root   root   229727 Jan 15 16:26 pgid35.png


HEAD http://localhost/tt/aaa
200 OK
Connection: close
Date: Wed, 15 Jan 2014 13:27:30 GMT
[...]
Content-Length: 229727
Content-Type: image/png                      <<<--- [[bullseye]]
Last-Modified: Wed, 15 Jan 2014 13:26:47 GMT
[...]

为简洁起见,我将包含一些 apache httpd 的配置提示,以使 mime magic 发挥作用:

#assuming the module folder is linked within apache root config dir as 'modules'
LoadModule mime_magic_module modules/mod_mime_magic.so
#define the magic file containing patterns for identifying file types
MIMEMagicFile conf/magic
#the system magic file normally contains more patterns than 
#the default http magic file
#centos magic file install path:
#MIMEMagicFile /usr/share/misc/magic
#do follow the symlinks if you are using them
<Directory />
Options FollowSymlinks
</Directory>

答案2

如何让您的静态 URL 不直接指向文档,而是指向设置正确的 Content-Type 标头然后流式传输文档的简单脚本?

<?php
    $filename = "path/to/your/file";

    $finfo = finfo_open(FILEINFO_MIME_TYPE); 
    $mimetype = finfo_file($finfo, $filename); 
    finfo_close($finfo);

    header("Content-Type: ".$mimetype );
    echo readfile($filename);
?>

相关内容