2

根据 Apache 手册,包含指令在使用目录路径时是递归的。但是使用通配符路径时它是递归的吗?

 Include "/usr/local/apache/conf/userdata/std/2/username/domain.com/*.conf"
4

3 回答 3

3

我检查了它,它不是递归的。

于 2014-02-16T08:26:05.300 回答
2

正如乔伊斯已经说过的,我可以通过自己测试来确认它不是递归的。 Include用作fnmatch通配符引擎,默认情况下不匹配斜杠,除非FNM_PATHNAME设置了标志,因此 a*不匹配/因此domain.com/*.conf不会在子目录中查找。

但是,从httpd 2.3.6开始,也可以将通配符用于子目录。

例子

Include /usr/local/apache2/conf.d/ssl.conf

这仅匹配特定文件。

Include /usr/local/apache2/conf.d

如果conf.d是一个文件,它只匹配这个文件。如果conf.d是目录,则递归匹配所有文件,包括子目录中的文件和非conf文件(会导致错误)。

Include /usr/local/apache2/conf.d/*.conf

这只会匹配.conf直接位于conf.d目录中的带有后缀的文件。子目录中的文件不匹配。

Include /usr/local/apache2/conf.d/*/*.conf

这只会匹配带有.conf后缀的文件,直接位于目录的conf.d子目录中,但不会匹配直接位于conf.d目录中的文件。

因此,例如,如果您需要匹配.conf直接位于 conf.d第一级子目录和第二级子目录中的所有文件,您可以使用:

Include /usr/local/apache2/conf.d/*.conf
Include /usr/local/apache2/conf.d/*/*.conf
Include /usr/local/apache2/conf.d/*/*/*.conf

如果您只有有效的配置文件conf.d并且想要匹配每个级别的子目录,那么您可以使用:

Include /usr/local/apache2/conf.d
于 2020-08-16T12:12:38.067 回答
0

您应该使用目录,而不是使用通配符。

早在 1.3 https://httpd.apache.org/docs/1.3/mod/core.html#include就已经支持

Apache 1.3.13 中的新功能是,如果 Include 指向目录而不是文件,Apache 将读取该目录和任何子目录中的所有文件,并将它们解析为配置文件。

于 2019-03-04T02:37:57.493 回答