下面的例子中,如果这些指令都对请求生效,它们将按照"A > B > C > D > E"的顺序生效。
<Location "/"> E </Location> <Files "f.html"> D </Files> <VirtualHost *> <Directory "/a/b"> B </Directory> </VirtualHost> <DirectoryMatch "^.*b$"> C </DirectoryMatch> <Directory "/a/b"> A </Directory>D和E无疑是最后生效的。再看三个Directory类的容器,对于Directory和DirectoryMatch,前者先生效,所以C排在A和B后,对于A和B,虚拟主机会在外部段落处理完后再处理,所以在A和B进行合并时,B将覆盖A,也即A先生效。所以顺序为"A>B>C>D>E"。但如果将上面的A段落改为:
<Directory "/a/b"> A <FilesMatch f.html> D1 </Files> </Directory>那么最终的顺序为"A>B>C>D>D1>E"。
以下示例则更有教育意义。尽管Directory设置了更严格的权限,但因为Location比Directory更后生效,它对所有访问都不做任何限制。也就是说,Directory在这里的权限设置是完全多余的。所以说,理解配置文件的合并规则对写配置文件至关重要。
<Location "/"> Require all granted </Location> # Whoops! This <Directory> section will have no effect <Directory "/"> <RequireAll> Require all granted Require not host badguy.example.com </RequireAll> </Directory>