配虚拟主机的主要目的:在一台web服务器上,虚拟出多个web站点!
首先来看一下动态网站访问的基本原理
一.配置基于域名的虚拟主机
Apache的虚拟主机分成两种:
基于IP地址的虚拟主机 192.168.96.12 192.168.96.13
基于域名的虚拟主机 www.test.com www.shop.com
而我们要做的都是基于域名的虚拟主机(为每一个web站点分配不同的域名(服务器名),根据浏览器所访问的域名的不同的,而查看不同的目录资源(不同的网站!))
我们现在要做的:
访问www.test.com的时候,访问上面test目录下的web资源
访问www.shop.com的时候,访问上面shop目录下的web资源
以上的工作是由Apache来完成的,所以需要修改Apache的配置文件!
注意:
Apache默认的提供了一个专门配置虚拟主机的一个配置文件:
在conf/extra/httpd-vhost.conf
开始配置
第一步:需要在主配置文件里面加载虚拟主机的配置文件
第二步:在虚拟主机的配置文件中创建虚拟主机
一台虚拟主机最基本的信息有:
域名(服务器名):是通过ServerName指令来完成!
目录(站点所在的根目录):是通过DocumentRoot指令来完成的!
此时,重启Apache!一台虚拟主机就搭建完成! 但是也就只是搭建完成,还是无法访问。
第三步:配置浏览器端的域名解析
此时,浏览器应该利用域名去访问服务器,但是浏览器需要先知道域名所对应的服务器的IP地址是什么!
打开windows自带的hosts文件
再次输入地址
注意:如果配置了虚拟主机,那么原来的默认的文档根目录就失效了,或者说被第一个虚拟主机所覆盖了!为了解决这个问题,需要额外增加一个localhost的虚拟主机!
上面的第一个虚拟主机就是为了解决这个问题!
二.目录访问权限
为了学习权限,在添加一台虚拟主机
输入地址:www.xiaoshou.com/xiaoshou.html 结果:
好吧,退一步,在输入:www.xiaoshou.com看看
好的,ok,跟我肛上了...
因为Apache可以控制浏览器是否有能力访问某个目录!默认的,Apache拒绝所有目录的访问权限
如果需要开放某个目录的访问权限,需要通过<Directory目录的路径>
</Directory>指令段对该目录进行单独的设置!
因为目录的配置,针对当前目录以及当前目录的子目录都生效,
所以刚才的test和shop两个虚拟主机默认的都是可以访问的!
所以,如果需要开访问itcast目录的访问权限,需要对该目录进行单独的设置:
重启Apache!
问题又来了,如果直接访问域名:
而直接访问test虚拟主机的时候:
也就是说,直接访问域名(服务器名)的时候,一共有三种情况:
第一:直接访问默认的某个页面,比如上面的localhost
第二:展示列表,比如上面的www.test.com
第三:直接Forbidden
配置索引页的指令:
DirectoryIndex
从左往右依次查找,存在就使用!
允许展示列表的指令:
Options Indexes
重启Apache
清理一下缓存
三.Apache配置系统
Apache的配置文件,分成主配置文件(httpd.conf以及extra下的其他配置文件)和分布式
分布式配置文件
概念:
分散到各个目录中的Apache的配置文件,所以,其中的配置,只针对该目录及其子目录生效
好处: 不用重启服务器,直接能生效
第一, 在主配置文件中开启允许分布式配置文件的权限
利用指令Allowoverride all
第二, 在相应的目录下增加分布式配置文件
添加.htaccess文件方法
1.在sublime直接生成保存
2.用命令行生成
分布式配置文件的名称:.htaccess
里面所写的配置,与<directroy></ directroy>指令端里面的配置的基本一样!
特点
修改之后立即生效!不用重启Apache,说明Apache每次读取到该目录的时候
,都要对里面的分布式配置文件进行读取!