try_files 動態內容類型

try_files 動態內容類型

我想知道如何為每個文件提供不同的內容類型。
例如我有以下 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 之前/之後的順序可能很重要

相關內容