现在有个需求如下:
a.xxx.com访问目录a
b.xxx.com访问目录b
.
.
.
n.xxx.com访问目录n
如果配置虚拟主机就需要配置n个虚拟主机,管理起来也不方便。
还好apache有个mod_vhost_alias模块正解以上问题。
本模块通过将HTTP请求中的IP地址和/或"Host:
"头内容转换为所要提供服务的文件路径名来创建动态的虚拟主机配置。这样的做法,使得应用配置大量相似的虚拟主机变得更为容易。
目录名称的转换
%% | 插入一个百分号(% ) |
%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
大于部分的个数,则简单的用下划线来替换。
以下为配置实例
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>
配置完毕重启生效
转载于:https://blog.51cto.com/wdj01/538316