我讨厌正则表达式!我的大脑不像正则表达式那样工作。有人可以帮忙解决我试图解决的以下问题吗?
我有一个nginx配置文件,出于安全原因阻止所有访问系统或隐藏文件的尝试(即以'。'开头的文件),使用下面的位置配置:
location ~ \/\. {
access_log off;
log_not_found off;
deny all;
}
但是,这也会阻止我的CouchDB服务器请求example.com/db/_local/.XYZ
我希望允许X/_local/.X
的所有请求,但拒绝向X/.X
发送所有其他请求。
所以我的正则表达式必须匹配所有/.
但不匹配/_local/.
。
例如
example.com/.secretfile // deny
example.com/db/_local/.LONGHASH // allow
example.com/other/.other // deny
任何RegEx大师都可以帮忙吗?
答案 0 :(得分:2)
假设Ngninx与PCRE完全兼容,这应该是一个解决方案:
location ~ (?<!\/_local)\/\. {
这使用“负面后瞻断言”:(?<!\/_local)
表示“不以/_local
为前缀”。
编辑: Escaped正斜杠