2
<Directory>和<DirectoryMatch>(以及其他<* Match>指令)之间的显式差异
前言 我是有关Web服务器的新手。我正在设置一个Apache2服务器,目前正在研究文档。 我的发现<Directory>,<Location>和<Files>指示每个都有相应的<*Match>:指令<DirectoryMatch>,<LocationMatch>并<FilesMatch>分别。表面上的差异足够明显: <*Match> 指令以正则表达式为参数 非匹配指令将纯字符串或外壳样式的glob作为其参数。 奇怪的是,如果非Match指令前面带有“〜”,也可以为其指定正则表达式作为其参数。因此,以下两行应该相同: # From the Apache2 docs <Directory ~ "^/www/[0-9]{3}"> ... </Directory> <DirectoryMatch "^/www/[0-9]{3}"> ... </DirectoryMatch> 问题 我想知道的是,是否有任何细微或关键的差异需要注意,Apache的core文档没有提及。本<DirectoryMatch>节确实提到了一个细微的区别: 兼容性 在2.3.9之前的版本中,此伪指令隐式应用于子目录(如<Directory>),并且与行符号($)的末尾不匹配。在2.3.9及更高版本中,仅与表达式匹配的目录受附带的指令影响。 除此之外,我想知道: Match和non-Match指令之间还有其他区别吗? 当需要正则表达式时,哪个指令更可取? 您认为还有其他相关信息吗? 笔记 <DirectoryMatch>并且<Directory "~">在同一合并级别 尽管没有明确提及,但<Directory "~">可以像一样使用命名组和反向引用<DirectoryMatch>。