如果include包含的文件不存在时,将报错。这时可以使用IncludeOptional指令进行加载,这表示存在则加载,不存在就算了。例如下面的第一条指令中,如果vhosts下没有子目录,或者子目录中没有".conf"文件都将失败,而第二条指令则不会。
Include conf/vhosts/*/*.conf IncludeOptional conf/vhosts/*/*.conf 1.2.7 Define和UnDefine指令该指令用于定义参数或定义向后全局生效的变量。语法格式为:
Define param [value]当只给定一个param时,表示定义一个参数,这个参数用于< IfDefine param >容器进行判断,只有定义了的参数param,该容器才返回真,其内封装的指令才生效。它的等价行为是在httpd启动时(必须是启动时),使用"-D"选项定义参数。例如下面两个方法是等价的:
# startup command shell> httpd -DMyName ...... # in config Define MyName当给定了两个参数,即还指定了value时,将表示定义一个变量,该变量具有向后全局性。也就是说,定义在某个虚拟主机中的变量在后面的另一个虚拟主机中也有效。引用变量时,使用${var}的方式。注意,变量名中不能包含冒号":"。
例如:
<IfDefine !TEST> Define servername </IfDefine> DocumentRoot "/var/www/${servername}/htdocs"使用UnDefine指令则是取消Define定义的参数或变量。语法为UnDefine param。
1.2.8 VirtualHost指令无疑,这是最重要的指令之一。用于封装一组指令只作用于指定主机名或IP地址的虚拟主机上。
语法格式为:
<VirtualHost addr[:port] [addr[:port]] ...> ... </VirtualHost>其中addr部分可以是以下几种情况:
虚拟主机的IP地址
虚拟主机IP地址对应的FQDN(不推荐)
字符"*",匹配任意IP地址
字符串"_default_",是"*"的别名
例如:
<VirtualHost 10.1.2.3:80> ServerAdmin webmaster@host.example.com DocumentRoot "/www/docs/host.example.com" ServerName host.example.com ErrorLog "logs/host.example.com-error_log" TransferLog "logs/host.example.com-access_log" </VirtualHost>需要为虚拟主机指定ServerName,否则它将会从主配置继承。对于基于名称的虚拟主机,ServerName更是不可缺少,否则将继承操作系统的FQDN。
当一个请求到达时,将按照最佳匹配进行主机匹配:通配的内容越少,优先级越高,也就越佳。例如"192.168.100.14:80"的优先级高于"*:80"。如果基于名称的虚拟主机无法匹配上,则采用虚拟主机列表中的第一个虚拟主机作为响应主机。如果所有虚拟主机都无法匹配上,则采用从主配置段落中的主机,如果主配置段落中注释了DocumentRoot,则返回对应的错误。
具体配置方法,见配置httpd虚拟主机。
1.2.9 Options和AllowOverride指令Options启用或禁用指定目录下的某些特性。有效值包括:All、None、ExecCGI、FollowSymLinks、Includes、IncludesNOEXEC、Indexes、MultiViews、SymLinksIfOwnerMatch。
不指定options时,默认为all。一般除了提供下载服务会开启一个Indexes选项,其他选项都会关掉,即使用:
Options NoneAllowOverride指令用于控制是否读取".htaccess"配置文件。
如何设置这个指令要看具体情况,有以下几种值,此外还可以设置为all和none,表示启用、禁用所有特性。
AuthConfig:基于用户认证时设置该值,此时将可以使用AuthGroupFile, AuthName, AuthType, AuthUserFile, equire等认证相关指令。
FileInfo: 控制文档类型时使用该值,此时将可以使用ErrorDocument, SetHandler,以及一些URL重写的指令。
Indexes:控制目录索引时使用该值,此时可以使用AddIcon, DirectoryIndex。
Limit:是否允许使用order、allow、deny指令,这三个指令已经废弃,目前还存在是为了兼容老版本。
例如下面的指令��得在使用非认证类和索引控制类指令时,将产生服务器类的错误。
AllowOverride AuthConfig Indexes 1.2.10 Require指令见Require指令。
1.2.11 长连接相关指令KeepAlive指令用于开启和关闭长连接功能。
KeepAlive on/off