如何在该位置使用Nginx Regexp

Ale*_*rev 5 regex nginx nginx-location

该Web项目将静态内容放入一些/ content / img文件夹中。网址规则是:/ img / {some md5}但在文件夹中的位置:/ content / img / {前两位数字} /

url:      example.com/img/fe5afe0482195afff9390692a6cc23e1
location: /www/myproject/content/img/fe/fe5afe0482195afff9390692a6cc23e1
Run Code Online (Sandbox Code Playgroud)

此nginx位置是正确的,但不安全(符号点在regexp中不好):

        location ~ /img/(..)(.+)$ {
               alias $project_home/content/img/$1/$1$2;
               add_header Content-Type image/jpg;
         }
Run Code Online (Sandbox Code Playgroud)

下一个位置更正确,但不起作用:

        location ~ /img/([0-9a-f]\{2\})([0-9a-f]+)$ {
               alias $project_home/content/img/$1/$1$2;
               add_header Content-Type image/jpg;
         }
Run Code Online (Sandbox Code Playgroud)

帮助我查找错误以获取更正确的Nginx位置。

Wik*_*żew 6

在POSIX BRE模式中,必须在限制量词中使用花括号,并且NGINX不使用该正则表达式。在这里,您不应该转义限制量大括号,但是需要告诉NGINX,您将大括号作为正则表达式模式字符串的一部分传递。

因此,您需要用双引号将整个模式括起来:

使用

location ~ "/img/([0-9a-fA-F]{2})([0-9a-fA-F]+)$"
Run Code Online (Sandbox Code Playgroud)

这是一个正则表达式演示

请注意,在当前情况下,您可以重复子模式:

 /img/([0-9a-fA-F][0-9a-fA-F])([0-9a-fA-F]+)$
      ^^^^^^^^^^^^^^^^^^^^^^^^
Run Code Online (Sandbox Code Playgroud)


小智 6

我让它工作,在位置部分周围加上双引号,如下所示:

location ~ "/img/([0-9a-f]{2})([0-9a-f]+)$"
Run Code Online (Sandbox Code Playgroud)

原因是 Nginx 使用大括号来定义配置块,因此它认为正在打开一个位置块。

来源