繁体   English   中英

正则表达式:匹配“ /”。 仅当未以“ / _local /”为前缀时。

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM