我想知道如何为每个文件提供不同的内容类型。
例如,我有以下 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 之前/之后的顺序可能会有影响