httpd配置文件中的容器处理顺序:
httpd的httpd.conf容器在配置文件中是可以多次使用的,同时也可以嵌套的,但是Apache在处理容器时却有一定的顺序的,因此在编写容器配置时需要按一定的顺序来进行,否则Apache处理结果很可能不是你想要的:
在Apache中容器处理顺序如下:
①<Directory>与.htaccess文件
②<DirectoryMatch>与<Directory>
③<Files><FilesMatch>
④<Location><LocationMatch>
Apache会优先处理<Directory>容器(但是不会处理带有正则表达式的<Directory>容器)和.htaccess文件,如果.htaccess文件与<Directory>容器有冲突,则以htaccess文件内容来覆盖<Directory>容器中冲突的部分,随后Apache会处理<DirectoryMatch>与<Directory>,再接着处理<Files>和<FilesMatch>容器,最后处理<Location>和<LocationMatch>容器。
例如:
<Location /var/www/html>
Order deny,allow
Allow from all
</Location>
<Directory /var/www/html>
Order deny,allow
Allow from all
Deny from www.baidu.com
</Directory>
※上述例子,Apache会优先处理<Directory /var/www/html>,最后处理<Location /var/www/html>容器所以<Location /var/www/html>的内容会覆盖<Directory /var/www/html>。因此对于禁止www.baidu.com的访问将被允许所有用户访问所代替。
以上4种容器中,除了<Directory>容器外,其他三组都会按照在配置文件中的顺序处理,而<Directory>容器则是按字典顺序有短到长被依次处理。
<Directory /var/www/html>
Order deny,allow
Allow from all
Deny from www.baidu.com
</Directory>
<Directory /var/www> #虽然它排在<Directory /var/www/html>后边,但是按照字典顺序由短到长排列它会被第一个优先处理
Order deny,allow
Allow from all
Deny from www.baidu.com
</Directory>