说明 | 提供大批量虚拟主机的动态配置支持 |
---|---|
状态 | 扩展(E) |
模块名 | vhost_alias_module |
源文件 | mod_vhost_alias.c |
本模块经过将HTTP请求中的IP地址和/或"Host:
"头内容转换为所要提供服务的文件路径名来建立动态的虚拟主机配置。这样的作法,使得应用配置大量类似的虚拟主机变得更为容易。 php
若是使用mod_alias
或mod_userdir
来将URI转换为文件名,那么mod_vhost_alias
的设定将被覆盖。例如,下面的配置将始终把/cgi-bin/script.pl
映射为/usr/local/apache2/cgi-bin/script.pl
。 html
ScriptAlias /cgi-bin/ /usr/local/apache2/cgi-bin/
web
VirtualScriptAlias /never/found/%0/cgi-bin/
本模块中的全部指令都用于将字符串替换为路径名。被替换的字符串(之后称为"name")能够是服务器名(参见UseCanonicalName
指令以了解决策方法)或者是"点数字"格式的虚拟主机IP地址。替换操做由printf
格式修饰符控制,该修饰符有如下几种格式: apache
%% |
插入一个百分号(% ) |
%p |
插入虚拟主机的端口号 |
%N.M |
插入名称(或者名称的一部分) |
N
和M
被用来指定name中的子字符串。N
从name中用小数点分隔的某部分中选取,而M
是从N
选中的字符串中选取部分字符。M
是可选的且默认为"0";小数点当且仅当M
存在时才必须书写。替换操做以下: 服务器
0 |
整个name |
1 |
第一部分 |
2 |
第二部分 |
-1 |
最后一部分 |
-2 |
倒数第二部分 |
2+ |
从第二部分开始到最后的全部部分 |
-2+ |
倒数第二部分以及以前的各部分 |
1+ 和-1+ |
等同于0 |
若是N
或M
大于部分的个数,则简单的用下划线来替换。 dom
对于一个简单的基于名称的虚拟主机,配置文件中可能会使用下面的指令: spa
UseCanonicalName Off
code
VirtualDocumentRoot /usr/local/apache/vhosts/%0
那么对http://www.example.com/directory/file.html
的请求将会返回文件/usr/local/apache/vhosts/www.example.com/directory/file.html
orm
对于拥有大量虚拟主机的状况而言,减小vhosts
目录大小的一个好办法就是从新组织。为此你可使用下面的配置: htm
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
进一步的分割能够用name尾字符来索引(hashing),例如:
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
在和本模块的协同中起了必定做用。
<VirtualHost *:80> ServerName anyweb ServerAlias * UseCanonicalName OFF VirtualDocumentRoot /vhost/www/%0 </VirtualHost>