现在有个需求如下:

a.xxx.com访问目录a

b.xxx.com访问目录b

.

.

.

n.xxx.com访问目录n

 


如果配置虚拟主机就需要配置n个虚拟主机,管理起来也不方便。

还好apache有个mod_vhost_alias模块正解以上问题。

本模块通过将HTTP请求中的IP地址和/或"Host:"头内容转换为所要提供服务的文件路径名来创建动态的虚拟主机配置。这样的做法,使得应用配置大量相似的虚拟主机变得更为容易。

目录名称的转换

%%插入一个百分号(%)
%p插入虚拟主机的端口号
%N.M插入名称(或者名称的一部分)

NM被用来指定name中的子字符串。N从name中用小数点分隔的某部分中选取,而M是从N选中的字符串中选取部分字符。M是可选的且默认为"0";小数点当且仅当M存在时才必须书写。替换操作如下:

0整个name
1第一部分
2第二部分
-1最后一部分
-2倒数第二部分
2+从第二部分开始到最后的所有部分
-2+倒数第二部分以及之前的各部分
1+-1+等同于0

如果NM大于部分的个数,则简单的用下划线来替换。

 


以下为配置实例

DNS中为xxx.com配置泛域名解析

*               IN      A       xxx.xxx.xxx.xxx

apache配置如下

<VirtualHost *:80>

    ServerAdmin  root@localhost

    DocumentRoot "/data/websites"

#使用泛域名

    ServerName *.xxx.com

#apache将使用从客户端请求中获取服务器名字和端口号,重新构建url,默认为on

    UseCanonicalName Off

#以“."为分界点,取倒数第三段作为目录名

    VirtualDocumentRoot /data/websites/%-3

    <Directory "/data/websites">

        Options FollowSymLinks

        AllowOverride FileInfo AuthConfig Limit

        Order allow,deny

        Allow from all

    </Directory>

</VirtualHost>

配置完毕重启生效