Apache HTTP服务器 2.0版本
说明: | 提供大容量虚拟主机的动态配置 |
---|---|
状态: | Extension |
模块名: | vhost_alias_module |
源文件: | mod_vhost_alias.c |
本模块通过将 HTTP 请求中的 IP 地址和/或 Host:
头内容转换为所要提供服务的文件的路径名称来创建动态的虚拟主机配置。这样的做法,使得应用大量的配置相近的虚拟主机变得更为容易。
如果 mod_alias
或者 mod_userdir
被用来转换 URIs 为文件名,那么这两个将重载 mod_vhost_alias
的设定。例如,下面的配置将在任何情况下把
/cgi-bin/script.pl
映射为
/usr/local/apache2/cgi-bin/script.pl
:
ScriptAlias /cgi-bin/ /usr/local/apache2/cgi-bin/
VirtualScriptAlias /never/found/%0/cgi-bin/
本模块中的所有指令都将字符串替换为路径名。被替换的字符串(以后称为名称: name )或者是服务器名字(见 UseCanonicalName
指令,以查阅具体如何决策)或者是“点数字”格式的虚拟主机的 IP 地址。替换操作使用了printf
,藉此提供各种转换格式:
%% |
插入一个 % |
%p |
插入虚拟主机的端口号 |
%N.M |
插入名称(或者名称的一部分) |
N
和 M
被用来指定名称(name)的子字符串。N
为名称中用小数点分隔的某一个部分,而 M
为被选中的 N
中的字符串。M
是可选的,如果不写 M
的话默认为 0 ;小数点当且仅当 M
存在时必须书写。替换操作如下:
0 |
整个名称 |
1 |
第一部分 |
2 |
第二部分 |
-1 |
最后一个部分 |
-2 |
倒数第二个部分 |
2+ |
第二个开始到最后的所有各个部分 |
-2+ |
倒数第二个以及之前的所有各个部分 |
1+ and -1+ |
等同于 0 |
如果 N
或者 M
大于存在的部分个数,则简单的用下划线来替换。
对于一个简单的基于名称的虚拟主机配置来说,在你的配置文件中可能会用下面的指令:
UseCanonicalName Off
VirtualDocumentRoot /usr/local/apache/vhosts/%0
那么请求http://www.example.com/directory/file.html
的操作将会如期的返回文件/usr/local/apache/vhosts/www.example.com/directory/file.html
。
对于拥有为数众多的虚拟主机的情况而言,减少 vhosts
目录大小的一个好办法就是重新组织。为此你可以使用下面的配置:
UseCanonicalName Off
VirtualDocumentRoot /usr/local/apache/vhosts/%3+/%2.1/%2.2/%2.3/%2
那么来自
http://www.domain.example.com/directory/file.html
的请求将会如期的返回文件
/usr/local/apache/vhosts/example.com/d/o/m/domain/directory/file.html
。
进一步的分割可以用名称末尾的字符来索引,例如:
VirtualDocumentRoot /usr/local/apache/vhosts/%3+/%2.-1/%2.-2/%2.-3/%2
该例返回文件
/usr/local/apache/vhosts/example.com/n/i/a/domain/directory/file.html
。
也可以这样使用:
VirtualDocumentRoot /usr/local/apache/vhosts/%3+/%2.1/%2.2/%2.3/%2.4+
该例返回文件
/usr/local/apache/vhosts/example.com/d/o/m/ain/directory/file.html
。
对于基于 IP 地址的虚拟主机,可以这样配置:
UseCanonicalName DNS
VirtualDocumentRootIP /usr/local/apache/vhosts/%1/%2/%3/%4/docs
VirtualScriptAliasIP /usr/local/apache/vhosts/%1/%2/%3/%4/cgi-bin
来自
http://www.domain.example.com/directory/file.html
的请求将会如期的返回文件
/usr/local/apache/vhosts/10/20/30/40/docs/directory/file.html
,这里假设 www.domain.example.com
的 IP 地址为 10.20.30.40 。
来自
http://www.domain.example.com/cgi-bin/script.pl
的请求将会执行程序
/usr/local/apache/vhosts/10/20/30/40/cgi-bin/script.pl
。
如果你希望在 VirtualDocumentRoot
指令中包含字符 .
,但这又和 %
指令会产生冲突,可以这样解决:
VirtualDocumentRoot /usr/local/apache/vhosts/%2.0.%3.0
来自
http://www.domain.example.com/directory/file.html
的请求将会如期的返回文件
/usr/local/apache/vhosts/domain.example/directory/file.html
。
指令 LogFormat
的 %V
和 %A
在和本模块的关联中起了一定作用。
说明: | 对于给定的虚拟主机动态配置根文档目录 |
---|---|
语法: | VirtualDocumentRoot 包含替换操作格式符的目录名称|none |
默认值: | VirtualDocumentRoot none |
上下文: | 服务器配置, 虚拟主机 |
状态: | Extension |
模块: | mod_vhost_alias |
指令 VirtualDocumentRoot
使 Apache 通过虚拟主机的域名找到相应的文档。扩展 包含替换操作格式符的目录名称 所得到的目录将会作为虚拟主机的根目录,这和指令 DocumentRoot
的参数是一样的。
如果 包含替换操作格式符的目录名称 为 none
,那么
VirtualDocumentRoot
将被关闭。 该指令不能和 VirtualDocumentRootIP
指令在同一语境中使用。
说明: | 对于给定的虚拟主机动态配置根文档目录 |
---|---|
语法: | VirtualDocumentRootIP 包含替换操作格式符的目录名称|none |
默认值: | VirtualDocumentRootIP none |
上下文: | 服务器配置, 虚拟主机 |
状态: | Extension |
模块: | mod_vhost_alias |
指令 VirtualDocumentRootIP
和指令VirtualDocumentRoot
相似,只是替换操作时用的不是虚拟主机域名,而是 IP 地址。
说明: | 对于给定的虚拟主机动态配置 CGI 目录 |
---|---|
语法: | VirtualScriptAlias 包含替换操作格式符的目录名称|none |
默认值: | VirtualScriptAlias none |
上下文: | 服务器配置, 虚拟主机 |
状态: | Extension |
模块: | mod_vhost_alias |
指令 VirtualScriptAlias
使 Apache 确定何处存放 CGI 脚本,这和指令 VirtualDocumentRoot
的做法是一样的。它匹配请求中的以 /cgi-bin/
起始的 URIs ,更像指令 ScriptAlias
/cgi-bin/
所做的。
说明: | 对于给定的虚拟主机动态配置 CGI 目录 |
---|---|
语法: | VirtualScriptAliasIP 包含替换操作格式符的目录名称|none |
默认值: | VirtualScriptAliasIP none |
上下文: | 服务器配置, 虚拟主机 |
状态: | Extension |
模块: | mod_vhost_alias |
指令 VirtualScriptAliasIP
和指令VirtualScriptAlias
相像,只是替换操作时用的不是虚拟主机域名,而是 IP 地址。