httpd.conf的容器部分配置。
1. <IfModule>容器
<IfModule>容器作用于模块,它会首先判断模块是否载入,然后再决定是否进行处理,也就是说只有当判断结果为真是才会执行容器内的指令,相反如果为假,则会全部忽略。可以使用<IfModule 模块名>或<IfModule !模块名>来判断模块是否载入,例如:
<IfModule !mpm_netware_module>
<IfModule mpm_netware_module>
在第一种情况下,<IfModule>容器会判断,如果载入了mpm_netware_module模块则不执行容器内的指令。第二种情况下,当mpm_netware_module被载入则执行容器内的指令。如例:
<IfModule dir_module> DirectoryIndex index.html </IfModule>
在这个例子中,<IfModule>容器会判断dir_module是否载入,如果载入则会执行DirectoryIndex index.html指令。
注意:<IfModule>容器是可以实现嵌套的。
2. <IfDefine>容器
<IfDefine>容器与<IfModule>容器类似,都是对条件进行判断,只不过<IfDefine>容器只有当条件判断为真时才会执行,而且它还需要在httpd启动时加上特定的参数才能起作用。如例:
<IfDefine Proxy> LoadModule proxy_module modules/libproxy.so </IfDefine>
$ sudo httpd -D Proxy
上面的例子中,<IfDefine>容器定义了一个Proxy的参数,然后在httpd启动时使用-D参数加上Proxy来启动,这样在httpd启动时读取到了上面的<IfDefine Proxy>容器就会判断出Proxy的值是真,并执行<IfDefine>容器内的指令。
<IfDefine !Proxy> LoadModule proxy_module modules/libproxy.so </IfDefine>
在这个例子中,<IfDefine !Proxy>容器中的 !Proxy与之前相比多了一个“!”,于是它与之前的例子完全相反,<IfDefine !Proxy>容器内的设置会被忽略掉。
3. <Directory>与<DirectoryMatch>容器
<Directory>容器的作用就是让它所封装的指令在指定的目录以及它的子目录中起作用,这个目录必须是一个完整的路径,当然你也可以使用通配符“*”,“?”匹配目录,也可以使用“[]”来确定字符范围,不过无论是“*”,“?”,还是“[]”都不能配置“/”,例如,<Directory /srv/*/html/index.html>不能匹配<Directory /srv/*/index.html>,而只能匹配<Directory /srv/apache/html/index.html>或是<Directory /srv/jonsk/html/index.html>。
<Directory /srv/apache/html/ > Order Deny,Allow Deny form All </Directory>
在上面的例子中,禁止了对 /srv/apache/html/ 目录的访问权限,任何请求到 /srv/apache/html/ 链接都会被拒绝。
注:apache2.2以上的版本,上面的配置方式已经改过了,不是这样的。
4.