Apache 指令容器中正则表达式的正确语法

Proper Syntax for RegEx in Apache Directive Containers

提问人:Kejatz 提问时间:9/14/2023 更新时间:9/14/2023 访问量:34

问:

  1. 将 RegEx 与 <Directory> 和 <DirectoryMatch> 容器路径一起使用的正确语法是什么?我只是对 ~ 和 ^ 的用法感到困惑。何时以及如何使用它们?
<Directory ~ /home/user/(site|sitedev)>
    ...
</Directory>
<DirectoryMatch ^/home/user/(site|sitedev)>
    ...
</DirectoryMatch>
  1. 引号是始终需要引号,还是仅当值中有空格或特殊字符时才需要引号?
"/home/user/(site|sitedev)"
/home/user/(site|sitedev)
  1. 此外,匹配以下所有文件夹的正则表达式是什么:
/home/my/site
/home/my/siteblog
/home/my/sitestore
or any other that starts with /home/my/site doesn't go deeper like /home/my/siteblog/random

这两者可以作为解决方案吗,有什么区别?

^/home/my/site.*
/home/my/^site.*
正则表达式 apache .htaccess httpd.conf

评论


答:

0赞 Patrick Janser 9/14/2023 #1

我不是专家,但我会说:

  1. <Directory ~ "^/home/user/(site|sitedev)">
    相当于

    两者都是核心内置的。我更喜欢第二个,因为它很多 对于初学者来说,阅读起来更清晰。
    <DirectoryMatch "^/home/user/(site|sitedev)">

  2. 你是对的,空格需要引号。
    我个人总是引用它们,以确保配置文件的一致性。

  3. ^/home/my/site.*是正确的:

    • ^意思是“开始”。这就是为什么它不能放在前面的原因 “网站”,就像你在 .如果你不这样做 把它放在开头,然后一个 URL 也会匹配。这是因为 pattern 的使用方式类似于搜索,如果在路径中找到它,则 它匹配,您将进入该块。/home/my/^site.*^/test/home/user/sitedev<DirectoryMatch>

在 的反义词中,您可以使用 ,表示“完成”。
这对于将所有 JPEG 文件与 匹配非常有用,其中 点应该转义,因为表示“任何字符”,并表示前面的“e”字符是可选的。当然,这个例子不会用在 a 上,而是用在 .
^$\.jpe?g$.?<DirectoryMatch><FilesMatch>

注意,正则表达式可以区分大小写,也可以不区分大小写,因此根据配置的不同,它无法匹配。我认为这取决于RegexDefaultOptions。 是否为“on”。/img/IMG234.JPGICASE

但我通常更喜欢通过启用来解决这个配置问题 模式开头的“不区分大小写”标志,或通过包装特定部分来启用它 之间和像这样:.(?i)\.jpe?g$(?i:)(?i:\.jpe?g)$

例子:

评论

0赞 Kejatz 9/16/2023
非常感谢!我还有几个两难境地。如何匹配服务器根目录: 或者 为了 Apache 性能,建议在任何地方禁用 .htaccess 文件,除非需要,这些文件是我的 WordPress 站点和 public_html 文件夹中的站点。可以这样完成吗:<Directory><Directory /> <Directory "/"><Directory /> AllowOverride None </Directory> <Directory ~ ^/home/user/(sites|public_html)> AllowOverride All </Directory>
0赞 Patrick Janser 9/19/2023
@Kejatz 是的,扫描 .htaccess 文件需要一些时间。您似乎可以访问服务器配置,因此您可以将 .htaccess 文件的内容移动到每个专用虚拟主机的配置中。如果您禁用覆盖,请不要忘记搜索所有可能位于WordPress网站子文件夹中的.htaccess文件。每次更新或模块安装后,都必须检查更改,以便将其报告给主虚拟主机配置。但是,检查/设置 HTTP 标头以允许内容缓存将对性能产生更高的影响。