Nginx Location正则匹配含唯一ID子目录的JPG图片方法咨询
Nginx正则匹配第四子目录为数字ID的JPG图片
你的正则写法有几个关键问题导致无法生效:
- 正则里的
^是匹配整个字符串的开头,但这里你是在/media/photos/thumbs/之后匹配ID,这个^会让正则找不到匹配项,必须去掉。 .jpg里的.没有转义,正则中.代表任意字符,会误匹配到1xjpg这类不符合要求的内容,要写成\.jpg。\/*的写法冗余,根据需求选择更精准的匹配规则即可。
正确的正则写法
情况1:仅匹配ID目录下直接的JPG文件(比如/media/photos/thumbs/00001/1.jpg)
location ~ ^/media/photos/thumbs/(\d+)/[^/]*\.jpg$ { # 你的配置内容 }
^放在整个路径开头,确保从字符串起始位置匹配,避免其他路径误匹配。(\d+)匹配纯数字的ID目录。[^/]*匹配ID目录下的文件名(不包含斜杠,仅匹配直接在ID目录下的文件)。\.jpg$确保结尾是.jpg,$匹配字符串结尾,避免匹配到.jpgxxx这类无效文件。
情况2:匹配ID目录及其所有子目录下的JPG文件(比如/media/photos/thumbs/00001/sub/2.jpg)
location ~ ^/media/photos/thumbs/(\d+)/.*\.jpg$ { # 你的配置内容 }
.*匹配ID目录之后的任意路径内容(包括子目录),只要最终是.jpg结尾就会被匹配。
如果需要忽略大小写匹配(比如匹配.JPG、.Jpg),把~换成~*即可:
location ~* ^/media/photos/thumbs/(\d+)/.*\.jpg$ { # 你的配置内容 }
内容的提问来源于stack exchange,提问作者master00
相关产品推荐
相关产品推荐

