该指令设置的是"当搜索的URL中的路径使用了"/"结尾时,httpd将搜索该指令所指定的文件响应给客户端"。也就是说,当url表示搜索的是目录时,将查找该目录下的DirectoryIndex。注意,很多时候如果没有给定尾部的"/",httpd的dir_module模块会自行加上"/",当然,是否补齐尾随的"/",也是可以控制的,见DirectorySlash指令。
DirectoryIndex的设置格式为:
DirectoryIndex disabled | local-url [local-url]例如,当设置"DirectoryIndex index.html"时,如果在浏览器中输入下面左边的几个URL,httpd将响应右边对应的文件。
http://192.168.100.14 ==> $DocumentRoot/index.html http://192.168.100.14/newdir/ ==> $DocumentRoot/newdir/index.html可以指定多个index文件,它们将按顺序从左向右依次查找,并返回第一个找到的index文件。例如:
<IfModule dir_module> DirectoryIndex index.php index.html /mydir/index.html </IfModule>当浏览器中输入时,将首先搜索index.php,如果该文件不存在,则再搜索index.html,如果还找不到,则再找该目录的子目录下的文件/mydir/index.html。但这不表示会搜索/mydir/index.html。
可以使用多个DirectoryIndex指令进行追加设置,它等价于单行设置多个值,例如下面的设置等价于DirectoryIndex index.php index.html:
DirecotryIndex index.php DirectoryIndex index.html如果要替换某个值,则直接修改或使用disabled关键字禁用其前面的Directoryindex。例如禁用index.php,只提供index.html的索引。
DirectoryIndex index.php DirectoryIndex disabled DirectoryIndex index.html但注意,"disabled"关键字必须独自占用一个DirectoryIndex指令,否则它将被解析成字面意思,也就是说将其当作一个index文件响应给客户端。
DirectoryIndex指令可以设置在Server、Virtual host、Location和Directory上下文。所以,当设置在location或Directory容器中时,它将覆盖全局设置。例如,当DocumentRoot为/usr/local/apache/htdocs时:
DirectoryIndex index.php <directory /usr/local/apache/htdocs/newdir> DirectoryIndex index.html </directory> # 或者 <location /newdir> DirectoryIndex index.html </location>在输入时,将提供index.html而非index.php。
当DirectoryIndex提供的索引文件都不存在时,将根据Options中的Indexes选项设置决定是否列出文件列表,除非是提供文件下载,否则出于安全考虑,这个选项是强烈建议关闭的。例如以下设置为打开,当
<directory /usr/local/apache/htdocs/newdir> Options Indexes DirectoryIndex index.html </directory> 1.2.5 ServerName和ServerAliasServerName用于唯一标识提供web服务的主机名,只有在基于名称的虚拟主机中该指令才是必须提供的。也就是说,如果不是在基于名称的虚拟主机中,可以任意指定该指令的值,只要你认为它能唯一标识你的主机。但如果不设置该指令,那么httpd在启动时,将会反解操作系统的IP地址。
唯一标识主机的方式,也即ServerName的语法为:
ServerName {domain-name|ip-address}[:port]例如,在主机web.longshuai.com上提供了一个httpd web服务,如果还想使用提供同样的服务,还想效率更高点,则在设置DNS别名后再配置:
ServerNameServerAlias用于定义ServerName的别名。如果在定义ServerName之后再定义ServerAlias,那么ServerName和ServerName没有任何区别。当然,为了区分基于名称的虚拟主机,还是必须要定义ServerName。
例如,下面几个ServerName和ServerAlias是完全等价的。
<VirtualHost *:80> ServerName server.example.com ServerAlias server server2.example.com server2 ServerAlias *.example.com # ... </VirtualHost> 1.2.6 Include指令在httpd启动时,首先会解析配置文件。httpd支持include指令来包含其他文件,在解析配置文件时会进行配置合并。
支持通配符"*"、"?"和"[]",但它们不能匹配斜线"/",如有必要,它们会按照文件名的字母顺序依次进行加载。如果include指令中指定包含一个目录,则会按照字母顺序加载该目录内的所有文件,这比较容易出错,因为有些时候会产生一些临时文件或非配置类的文件。
例如:
Include /usr/local/apache/conf/ssl.conf Include /usr/local/apache/conf/vhosts/*.conf可以使用绝对路径,也可以使用相对路径,如果使用相对路径,则它相对于ServerRoot。
Include conf/ssl.conf Include conf/vhosts/*.conf