
我想知道如何為每個文件提供不同的內容類型。
例如我有以下 nginx 設定:
server {
listen 80;
server_name site.com;
location ~ ^/(.*) {
root /home/site/;
try_files $uri
$uri.png
$uri.bin
=404;
}
}
例如,any$uri.png
將具有image/png
內容類型標頭並且$uri.bin
將具有application/octet-stream
.
問題:我不知道如何確定file
哪個try_files
已選取。
我已經設定了 lua 模組並正在工作,以防萬一需要它。
有其他人嘗試過這樣的事情嗎?
答案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 之前/之後的順序可能很重要