[英]Regex: match '/.' only if not prefixed with '/_local/.'
我讨厌正则表达式! 我的大脑无法像正则表达式那样工作。 有人可以帮忙解决我正在尝试解决的以下问题吗?
我有一个nginx配置文件,当前出于安全原因阻止使用以下位置config的所有尝试访问系统或隐藏文件(即以“。”开头的文件)的尝试:
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专家们可以帮忙吗?
假设Ngninx与PCRE完全兼容,这应该是一个解决方案:
location ~ (?<!\/_local)\/\. {
这使用“负向后断言”: (?<!\\/_local)
表示“未以/_local
前缀”。
编辑:转义的正斜杠
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.