我正在构建一个应用程序,其中一些文件将由应用程序本身提供。我不擅长配置服务器端的东西,所以我的 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
我假设您希望为服务器提供一个类似于(.+)\.(\d+)\.(js|css|png|jpg|jpeg|gif)$
以下文件的位置 URI /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;
}
调用该/myString.file.ext
URI 将提供以下来源的内容/data/photos/myString/file.ext
请注意,所有 nginx 位置都以 开头/
。
还要记住的是,每个请求都由只有一个位置,因此如果它们应该同时应用于请求,您可能需要合并它们。