You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Apache/Nginx转Caddyfile时的正则表达式问题求助

Apache/Nginx转Caddyfile:单正则实现隐藏文件访问限制

问题背景

原本在Apache和Nginx中,可通过负前瞻正则限制访问所有以点开头但不属于.well-known目录的文件/目录:

  • Apache配置:
<IfModule mod_authz_core.c>
    <LocationMatch "(^|/)\.(?!well-known/)">
        Require all denied
    </LocationMatch>
</IfModule>
  • Nginx配置:
location ~* /\.(?!well-known/) {
  deny all;
}

转换到Caddy时,当前实现是通过两个正则配合not指令完成:

@block {
    path_regexp ^(/\..*)$
    not path_regexp "^/\.well-known/.*$"
}
respond @block 403

但Caddy采用的RE2正则语法不支持负前瞻,希望仅用单个正则实现相同逻辑,避免依赖not指令。

解决思路

利用RE2支持的分支匹配(|),将规则拆分为两种需要拦截的场景,通过正向匹配覆盖所有需限制的路径,同时自动排除.well-known相关路径:

  1. 根目录下直接存在的隐藏文件/目录(如/.env、/.git)
  2. 任意子目录下的隐藏文件/目录(如/foo/.bar)

最终Caddy配置

@block {
    path_regexp ^/\.(?!well-known/).*$|^/.+/\..*$
}
respond @block 403

正则解释

  • ^/\.(?!well-known/).*$:匹配根目录下以.开头,但并非.well-known/起始的路径(如/.env、/.git/config)
  • ^/.+/\..*$:匹配任意子目录下的隐藏文件/目录(如/app/.env、/blog/.htaccess)

两个分支通过|连接,完整覆盖所有需拦截的路径,同时自动豁免/.well-known/开头的合法请求。


内容的提问来源于stack exchange,提问作者obeN

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 00:32:07