一、使用 mod_vhost_alias
1、简单的动态虚拟主机 Chinaz^com
# 从 Host: 头中取得服务器名字 Server Name
Chinaz.com
UseCanonicalName Off
Chinaz~com
# 这里的日志格式,可以在将来通过第一个参数域来分隔不同的虚拟主机的日志 Chinaz_com
LogFormat "%V %h %l %u %t \"%r\" %s %b" vcommon
站.长.站
CustomLog logs/access_log vcommon 中国站.长站
# 在返回请求的文件名的路径中包含进服务器名字: server name
中国站长_站,为中文网站提供动力
VirtualDocumentRoot /www/hosts/%0/docs
Www^Chinaz^com
VirtualScriptAlias /www/hosts/%0/cgi-bin 中国站.长站
2、更为有效的基于 IP 地址的虚拟主机 中国站.长站
# 从 IP 地址反解析得到服务器名字(server name)
Chinaz.com
UseCanonicalName DNS
中国.站长站
# 在日志中包含 IP 地址,便于后续分发 中国站长_站,为中文网站提供动力
LogFormat "%A %h %l %u %t \"%r\" %s %b" vcommon Www@Chinaz@com
CustomLog logs/access_log vcommon
中.国.站长站
# 在文件路径中包含 IP 地址 [中国站长站]
VirtualDocumentRootIP /www/hosts/%0/docs 中国站.长.站
VirtualScriptAliasIP /www/hosts/%0/cgi-bin
Chinaz.com
二、使用 mod_rewrite Chinaz
1、使用 mod_rewrite 实现简单的动态虚拟主机
Chinaz_com
# 从 Host: 头获取服务器名字
Www@Chinaz@com
UseCanonicalName Off
Chinaz.com
# 可分割的日志 Www_Chinaz_com
LogFormat "%{Host}i %h %l %u %t \"%r\" %s %b" vcommon 中国站.长.站
CustomLog logs/access_log vcommon
中国.站.长站
<Directory /www/hosts> 中国站长.站
# ExecCGI is needed here because we can’t force Chinaz.com
# CGI execution in the way that ScriptAlias does Www@Chinaz@com
Options FollowSymLinks ExecCGI Chinaz@com
</Directory> Www_Chinaz_com
# 接下来是关键部分 Www~Chinaz~com
RewriteEngine On Chinaz@com
# a ServerName derived from a Host: header may be any case at all RewriteMap lowercase int:tolower
站长.站
## 首先处理普通文档:
Chinaz^com
# 允许变名 /icons/ 起作用 – 其他变名类同 中国站.长.站
RewriteCond %{REQUEST_URI} !^/icons/ [中国站长站]
# 允许 CGIs 站.长站
RewriteCond %{REQUEST_URI} !^/cgi-bin/ 中国.站长站
# 开始“变戏法” Chinaz^com
RewriteRule ^/(.*)$ /www/hosts/${lowercase:%{SERVER_NAME}}/docs/$1 Chinaz
## 现在处理 CGIs – 我们需要强制使用一个 MIME 类型
Www_Chinaz_com
RewriteCond %{REQUEST_URI} ^/cgi-bin/ 中国站长_站,为中文网站提供动力
RewriteRule ^/(.*)$ /www/hosts/${lowercase:%{SERVER_NAME}}/cgi-bin/$1 [T=application/x-httpd-cgi] 站长.站
# 好了! Chinaz~com
2、使用独立的虚拟主机配置文件 vhost.map
中.国.站.长.站
vhost.map 文件包含了类似下面的内容:
[中国站长站]
www.customer-1.com /www/customers/1
站.长.站
www.customer-2.com /www/customers/2
Chinaz.com
# … 中.国站长站
www.customer-N.com /www/customers/N 中国站长_站,为中文网站提供动力
http.conf 包含了: 站.长.站
RewriteEngine on Www@Chinaz@com
RewriteMap lowercase int:tolower Chinaz@com
# 定义映像文件
中国站.长站
RewriteMap vhost txt:/www/conf/vhost.map
中国站长_站,为中文网站提供动力
# 和上面的例子一样,处理变名 中国站长.站
RewriteCond %{REQUEST_URI} !^/icons/ 站长.站
RewriteCond %{REQUEST_URI} !^/cgi-bin/
Chinaz~com
RewriteCond ${lowercase:%{SERVER_NAME}} ^(.+)$ 中国站长_站,为中文网站提供动力
# 这里做基于文件的重新映射
中国站长.站
RewriteCond ${vhost:%1} ^(/.*)$ 中国.站.长站
RewriteRule ^/(.*)$ %1/docs/$1 Chinaz@com
RewriteCond %{REQUEST_URI} ^/cgi-bin/ 中国站长.站
RewriteCond ${lowercase:%{SERVER_NAME}} ^(.+)$ Chinaz~com
RewriteCond ${vhost:%1} ^(/.*)$
中国站长_站,为中文网站提供动力
RewriteRule ^/(.*)$ %1/cgi-bin/$1 Chinaz
