Regex 子文件夹深度未知的nginx位置

Regex 子文件夹深度未知的nginx位置,regex,nginx,nginx-location,Regex,Nginx,Nginx Location,我想为图像设置一个自定义位置,以便设置更好的expires值,并将其从access.log中删除 图像的本地路径如下所示/var/www/html/public/image/user/{username}/{?subfolder}/filename.jpg 图像所在的位置可以有一个或多个子文件夹 url应该看起来像http://example.com/image/user/{username}/{?subfolder}/filename.jpg。由于可以使用不同的文件夹深度将不同的文件夹发送给u

我想为图像设置一个自定义位置,以便设置更好的
expires
值,并将其从
access.log
中删除

图像的本地路径如下所示
/var/www/html/public/image/user/{username}/{?subfolder}/filename.jpg

图像所在的位置可以有一个或多个子文件夹

url应该看起来像
http://example.com/image/user/{username}/{?subfolder}/filename.jpg
。由于可以使用不同的文件夹深度将不同的文件夹发送给
user
,因此我无法对其进行硬编码

我用这个位置规则进行了尝试,但nginx尝试将其定位在默认根目录中,而不是指定的根目录中

location /image/[^\\]+/.*\.(jpg|jpeg|gif|png|css|ico)$ {
    root /var/www/html/public/image;
    expires           30d;
}

我在PCRE测试仪上尝试了这个表达式,结果成功了。感谢您的帮助。

如果您将示例中的
设置为
/var/www/html/public/image
,那么对
/image/user/foo.jpg
的请求将以
/var/www/html/public/image/image/user/foo.jpg>结束,这是不希望的。因此,我认为您不应该触摸根目录(它必须指向公共目录)

简单地说:

location ^/image/.*/.*\.(jpg|jpeg|gif|png|css|ico)$ {
    expires 30d;
}
我会做好的

如果以某种方式对文件名进行了哈希/版本控制(例如
foo.123.jpg
),则可以使用以下方式进行主动缓存:

location ^/image/.*/.*\.(jpg|jpeg|gif|png|css|ico)$ {
    immutable on;
}