根据 Apache 手册,包含指令在使用目录路径时是递归的。但是使用通配符路径时它是递归的吗?
Include "/usr/local/apache/conf/userdata/std/2/username/domain.com/*.conf"
我检查了它,它不是递归的。
正如乔伊斯已经说过的,我可以通过自己测试来确认它不是递归的。
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
您应该使用目录,而不是使用通配符。
早在 1.3 https://httpd.apache.org/docs/1.3/mod/core.html#include就已经支持
Apache 1.3.13 中的新功能是,如果 Include 指向目录而不是文件,Apache 将读取该目录和任何子目录中的所有文件,并将它们解析为配置文件。