我正在准备一个nginx HTML缓存,该缓存使用map
白色列出的URL来确定哪些页面是缓存安全的。
除非字符串中有edit
字样,否则某些页面可以缓存。
例如:/users/123
将可以安全地缓存;但是,/users/123/edit
缓存不安全
地图如下:
map $request_uri $skip_cache_whitelist {
default 1;
~^/index.php 0;
/ 0;
~^/browse 0;
~^/contact 0;
etc.
我尝试的方法如下:
~^/users(?!edit) 0;
~(^/users)(?!edit) 0;
~(?!edit)[^users] 0;
没有一项工作。
答案 0 :(得分:1)
您提出的解决方案是带有负超前断言的正则表达式。您当前的尝试无法解决/123/
和users
子字符串之间的edit
。
我已经测试了以下内容:
map $request_uri $skip_cache_whitelist {
default 1;
...
~^/users(?!.*edit) 0;
...
}
map
中的正则表达式将按顺序求值,直到找到匹配项为止。因此,否定超前断言的另一种选择是两个正则表达式,其中更具体的出现在最前面。
例如:
map $request_uri $skip_cache_whitelist {
default 1;
...
~^/users/.*/edit 1;
~^/users 0;
...
}