
我正在建立一個應用程序,其中一些文件將由應用程式本身提供服務。我不擅長設定伺服器端的東西,所以我的 nginx 設定如下所示:
location ~* (.+)\.(\d+)\.(js|css|png|jpg|jpeg|gif)$ {
try_files $uri $1.$3;
}
location ~* ^.+.(jpg|jpeg|gif|css|png|js|ico|xml|txt)$ {
access_log off;
expires 30d;
root /var/www/domain_tld/public;
}
我知道第二條規則是用於服務從 nginx 直接列出的擴展,這很酷,但我想要一條規則:
/data/photos/{string}/{name}.{extension}
先感謝您
答案1
我假設您希望提供一個位置 URI,(.+)\.(\d+)\.(js|css|png|jpg|jpeg|gif)$
例如/data/photos/$1/$2.$3
.
然後,就這麼簡單(請注意,我稍微修改了正規表示式,將所有情況盡可能接近地列入白名單可能是完美的):
location ~* ^/(?<string>.+)\.(?<name>\d+)\.(?<extension>js|css|png|jpg|jpeg|gif)$ {
root /data/photos;
try_files $string/$name.$extension =404;
}
對 URI 的呼叫/myString.file.ext
將提供以下內容:/data/photos/myString/file.ext
請注意,所有 nginx 位置都以/
.
另請記住,每個請求均由只有一個位置,因此,如果它們應該同時應用於請求,您可能需要合併您的兩個。