定义:虚拟主机指的是在单一机器上运行多个网站,(例如 www.company1.com 和 www.company2.com) 。 虚拟主机可以“基于 IP”,即每个 IP 一个站点; 或者“基于名称”,即每个 IP 多个站点。这些站点运行在同一物理服务器上的事实不会明显的透漏给最终用户。
Apache 是第一个支持基于 IP 的虚拟主机的服务器。 Apache 版本 1.1 和更新的版本同时支持基于 IP 和基于名称的虚拟主机。基于名称的虚拟主机有时候称为基于主机或非 IP 的虚拟主机.
配置虚拟主机
第一步、开启虚拟主机模块模块,在httpd.conf中开启以下内容
<pre name="code" class="plain">#虚拟主机模块
LoadModulevhost_alias_module modules/mod_vhost_alias.so
和
# Virtual hosts
Includeconf/extra/httpd-vhosts.conf
注意:在启用了虚拟主机模块后httpd.conf中的一些配置将失效。
第二步:在C:\Windows\System32\drivers\etc下的hosts文件加入以下内容
127.0.0.1 www.test.com
意思是:我们输入www.test.com时实际访问的是127.0.0.1
第三步:打开 apache的extra下的httpd-vhosts.conf文件,会看到以下内容,我们的配置也是根据它来写的,
<VirtualHost *:80>
ServerAdmin webmaster@dummy-host2.example.com
DocumentRoot "c:/Apache24/docs/dummy-host2.example.com"
ServerName dummy-host2.example.com
ErrorLog "logs/dummy-host2.example.com-error.log"
CustomLog "logs/dummy-host2.example.com-access.log" common
</VirtualHost>
我们的配置为:
<VirtualHost *:80>
DocumentRoot "c:/wamp/www/test"
ServerName www.test.com
<Directory "c:/wamp/www/test">
Order Deny,Allow
Deny from all
Allow from 127.0.0.1
Allow from 192.168.1
</Directory>
</VirtualHost>
上面的配置意思是说,我闪访问“www.test.com”实际就是访问的c:/wamp/www/test下的内容。而且是只允许自己和局域网访问的。
VirtualHost结点下的配置项
DocumentRoot 网站目录 (注意:如果网站目录中的路径有空格,请在路径两端加上双引号)
ServerName 要绑定的域名(必填)
ServerAdmin 管理员邮箱
ServerAlias 要绑定的虚拟主机的别名。(可选,如果多个域名,中间以空格分隔,如果没有,则去掉该行)
支持*,?两种通配符,比如 *.abc.com,表示任意一个abc.com的二级域名都可访问。
CustomLog 用户日志文件(可选,如果不需要,则去掉该行)
ErrorLog 错误日志(可选,如果不需要,则去掉该行)
Directory结点下的配置项
#拒绝、允许的排序,先后关系很重要
OrderDeny,Allow
#拒绝所有
Denyfrom all
#允许本机
Allowfrom 127.0.0.1
#允许局域网
Allowfrom 192.168.1
#是否显示目录结构,默认为all,如想显示则为indexes,不想显示为none
#Optionsnone
#设置网站的首页,可以写多个,第一个找不到它会去找第二个
DirectoryIndextest.html test1.php
#配置404错误页面,跳到固定页面,当然也可以配置其它错误的页面
ErrorDocument404 /404.html
#配置rewrite规则,但要注意重写规则时要把options设置成all,需要开启rewrite模块。
RewriteEngineOn
#规则将aaa.html的请求转发到test1.php上
RewriteRuleaaa.html test1.php
附录
另外,如果我们把重写规则写的复杂一点,如下规则
RewriteRule([a-zA-Z0-9]*)-([a-zA-Z0-9]*)\.html $1.php?type=$2
我们输入test-english.html访问的就是test.php?type=English
这样我们就可以实现PHP页面伪静态了。