正则表达式:匹配 '/.'仅当不以“/_local/”为前缀时。
Regex: match '/.' only if not prefixed with '/_local/.'
我讨厌正则表达式!我的大脑只是不像正则表达式那样工作。有人可以帮助我解决以下问题吗?
我有一个 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
任何正则表达式专家都可以帮忙吗?
假设Ngninx完全兼容PCRE,这应该是一个解决方案:
location ~ (?<!\/_local)\/\. {
这使用了“负向后断言”:(?<!\/_local)
表示“没有前缀 /_local
”。
编辑: 转义正斜杠
我讨厌正则表达式!我的大脑只是不像正则表达式那样工作。有人可以帮助我解决以下问题吗?
我有一个 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
任何正则表达式专家都可以帮忙吗?
假设Ngninx完全兼容PCRE,这应该是一个解决方案:
location ~ (?<!\/_local)\/\. {
这使用了“负向后断言”:(?<!\/_local)
表示“没有前缀 /_local
”。
编辑: 转义正斜杠