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位置。
在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 使用大括号来定义配置块,因此它认为正在打开一个位置块。
| 归档时间: |
|
| 查看次数: |
18308 次 |
| 最近记录: |