我试图匹配以下路线:
/{anything1}/{anything2}/file.{jpg|png}
其中anything1
可以是[a-z0-9]
(小写字母和数字), anything2
可以是[-a-z0-9]
(小写字母,数字和破折号)。
之所以我不想匹配所有的文件,像这样:
location ~* (.+)\.(jpg|png)$
是否需要location
块中可用的$anything1
和$anything2
variables,以便稍后重写。
提前致谢。
你可以使用一个正则表达式
^/[^/]+/[^/]+/[^/]+\.(?:jpg|png)$
查看正则表达式演示
[^/]+
匹配除1以外的1+个字符,因此不能溢出/
分隔符,并确保只匹配具有一定数量的子路径的路径。
点必须逃脱,因此\.
用来。
(?:jpg|png)
是一个匹配2个序列( jpg
或png
(?:jpg|png)
的替代组 。
如果你确实想要只允许特定的字符(一个白名单方法),你将需要使用量词 (我认为你需要+
, 一个或多个发生 )与你的字符类的任何部分:
^/[a-z0-9]+/[a-z0-9-]+/[^/]*\.(?:png|jpg)$