用于nginx路由匹配的正则expression式

我试图匹配以下路线:

/{anything1}/{anything2}/file.{jpg|png}

其中anything1可以是[a-z0-9] (小写字母和数字), anything2可以是[-a-z0-9] (小写字母,数字和破折号)。

之所以我不想匹配所有的文件,像这样:

location ~* (.+)\.(jpg|png)$

是否需要location块中可用的$anything1$anything2variables,以便稍后重写。

提前致谢。

你可以使用一个正则表达式

 ^/[^/]+/[^/]+/[^/]+\.(?:jpg|png)$ 

查看正则表达式演示

[^/]+匹配除1以外的1+个字符,因此不能溢出/分隔符,并确保只匹配具有一定数量的子路径的路径。

点必须逃脱,因此\. 用来。

(?:jpg|png)是一个匹配2个序列( jpgpng (?:jpg|png)替代组

如果你确实想要只允许特定的字符(一个白名单方法),你将需要使用量词 (我认为你需要+一个或多个发生 )与你的字符类的任何部分:

 ^/[a-z0-9]+/[a-z0-9-]+/[^/]*\.(?:png|jpg)$