Web项目将静态内容放入some / content / img文件夹中。 网址规则是:/ img / {some md5} 但文件夹中的位置:/ content / img / {前两位数} /
示例
url: example.com/img/fe5afe0482195afff9390692a6cc23e1
location: /www/myproject/content/img/fe/fe5afe0482195afff9390692a6cc23e1
这个nginx位置是正确的但很多不安全(正则表达式中符号点不好):
location ~ /img/(..)(.+)$ {
alias $project_home/content/img/$1/$1$2;
add_header Content-Type image/jpg;
}
下一个位置更正确,但不起作用:
location ~ /img/([0-9a-f]\{2\})([0-9a-f]+)$ {
alias $project_home/content/img/$1/$1$2;
add_header Content-Type image/jpg;
}
帮助我找到更正确的nginx位置的错误。
答案 0 :(得分:4)
在POSIX BRE模式中,必须转义限制量词中的大括号,NGINX不使用该正则表达式。在这里,你不应该逃避限制量词括号,但你需要告诉NGINX你将大括号作为正则表达式模式字符串的一部分。
因此,您需要用双引号括起整个模式:
使用
location ~ "/img/([0-9a-fA-F]{2})([0-9a-fA-F]+)$"
这是regex demo。
请注意,在当前场景中,您只需重复子模式:
/img/([0-9a-fA-F][0-9a-fA-F])([0-9a-fA-F]+)$
^^^^^^^^^^^^^^^^^^^^^^^^
答案 1 :(得分:4)
I got it working putting double-quotes around the location part like this:
location ~ "/img/([0-9a-f]{2})([0-9a-f]+)$"
the reason is that Nginx uses curly brackets to define config blocks so it thinks is opening a location block.