try_files 动态内容类型

try_files 动态内容类型

我想知道如何为每个文件提供不同的内容类型。
例如,我有以下 nginx 配置:

server {
    listen 80;
    server_name site.com;

    location ~ ^/(.*) {
        root /home/site/;
        try_files $uri
            $uri.png
            $uri.bin
            =404;
        }
}

例如任何$uri.png都会有image/png内容类型标题并且$uri.bin会有application/octet-stream

问题:我不知道如何确定选择了file哪个。 我已经设置并运行了 lua 模块,以备不时之需。try_files

还有其他人尝试过类似的事情吗?

答案1

假设我明白了你想要什么,那么这对我有用:

if ($request_uri ~* \.png$) {
    more_set_headers "Content-type: image/png";
}
if ($request_uri ~* \.(jpg|jpeg)$) {
    more_set_headers "Content-type: image/jpeg";
}
if ($request_uri ~* \.gif$) {
    more_set_headers "Content-type: image/gif";
}

需要非标准模块,除非 nginx 最近发生了变化,允许标准 add_header 函数覆盖 Content-type:http://wiki.nginx.org/HttpHeadersMoreModule

如果你想反向操作(即原始 URI 不包含扩展名而文件系统包含),请尝试用 $uri 替换 $request_uri,并且 try_files 之前/之后的顺序可能会有影响

相关内容