方法一:简单的动态虚拟主机
代码:
这是 httpd.conf 文件中,完成虚拟主机的配置方法,这里采用了 mod_vhost_alias 。
# 从 host: 头中取得服务器名字 server name
usecanonicalname off
# 这里的日志格式,可以在将来通过第一个参数域来分隔不同的虚拟主机的日志
logformat %v %h %l %u %t %r %s %b vcommon
customlog logs/access_log vcommon
# 在返回请求的文件名的路径中包含进服务器名字: server name
virtualdocumentroot /虚拟主机空间根目录/%0/htdocs
virtualscriptalias /虚拟主机空间根目录/%0/cgi-bin
#需要首先建立 /%0/htdocs ,然后把文件放在htdocs才可以访问
#%0表示虚拟主机的server name的这个名字,例如www.net.cn
将 usecanonicalname off 的配置改为 usecanonicalname dns 即可实现基于 ip 地址的虚拟主机。而在文件路径中所要插入的服务器名字(server name) 则通过虚拟主机的 ip 地址解析而得。
方法二:多个的动态虚拟主机
代码:
usecanonicalname off
logformat %v %h %l %u %t %r %s %b vcommon
options followsymlinks
allowoverride all
options followsymlinks
allowoverride none
servername www.commercial.isp.com
customlog logs/access_log.commercial vcommon
virtualdocumentroot /www/commercial/%0/docs
virtualscriptalias /www/commercial/%0/cgi-bin
servername www.homepages.isp.com
customlog logs/access_log.homepages vcommon
virtualdocumentroot /虚拟主机空间根目录/%0/htdocs
virtualscriptalias /虚拟主机空间根目录/%0/cgi-bin
方法三:基于 ip 地址的虚拟主机
代码:
# 从 ip 地址反解析得到服务器名字(server name)
usecanonicalname dns
# 在日志中包含 ip 地址,便于后续分发
logformat %a %h %l %u %t %r %s %b vcommon
customlog logs/access_log vcommon
# 在文件路径中包含 ip 地址 %0表示ip
virtualdocumentrootip /www/hosts/%0/docs
virtualscriptaliasip /www/hosts/%0/cgi-bin
方法四:使用 mod_rewrite 的虚拟主机系统
代码:
rewriteengine on
rewritemap lowercase int:tolower
# 检查 hostname 正确与否,之后才能使 rewriterule 起作用
rewritecond ${lowercase:%{server_name}} ^www\.[a-z-]+\.isp\.com$
# 将虚拟主机名字廉洁到 uri 的开头
# [c] 表明本次重写的结果将在下一个 rewrite 规则中使用
rewriterule ^(.+) ${lowercase:%{server_name}}$1 [c]
# 现在创建实际的文件名
rewriterule ^www\.([a-z-]+)\.isp\.com/(.*) /home/$1/$2
重头戏
方法五:使用独立的虚拟主机配置文件
当你修改vhost.map的时候,不需要重新启动apache
代码:
这样的布局利用了 mod_rewrite 的高级特性, 在独立的虚拟主机配置文件中转换。如此可以更为灵活,但需要较为复杂的设置。
vhost.map 文件包含了类似下面的内容:
www.customer-1.com /www/customers/1
www.customer-2.com /www/customers/2
#......
www.customer-n.com /www/customers/n
http.conf 包含了:
rewriteengine on
rewritemap lowercase int:tolower
# 定义映像文件
rewritemap vhost txt:/vhost.map的路径/vhost.map
# 和上面的例子一样,处理变名
rewritecond %{request_uri} !^/icons/
rewritecond %{request_uri} !^/cgi-bin/
rewritecond ${lowercase:%{server_name}} ^(.+)$
# 这里做基于文件的重新映射
rewritecond ${vhost:%1} ^(/.*)$
rewriterule ^/(.*)$ %1/docs/$1
rewritecond %{request_uri} ^/cgi-bin/
rewritecond ${lowercase:%{server_name}} ^(.+)$
rewritecond ${vhost:%1} ^(/.*)$
rewriterule ^/(.*)$ %1/cgi-bin/$1
引用:
以上内容来自apache2的动态配置大型虚拟主机,在这里列出来,是为了方便某些不想看文档的人参考一下子。
如果你去http://w.yi.org,使用关键字 虚拟主机 搜索一下子,相信会有更多的资料
