默认情况下,Apache安装成功,就默认配置好了一个站点,该站点的实际位置:Apache安装位置/htdocs
站点其实就是一个文件夹嘛,你可以将任何文件夹当作站点!可以打开Apache的配置文件httpd.conf进行配置。一个站点的2个核心信息:
-
主机名:
搜索ServerName,去掉注释可以进行主机名配置
- 站点位置(物理路径):
1.搜索DocumentRoot,去掉注释可以进行站点位置配置,填上你想它作为站点的文件夹路径(好像本来就没有注释的?)
2.允许站点访问,还需要下面一个设置,路径为你想要作为站点文件夹的路径,其余不用写,都已经写好了
3.还可以为站点设置访问首页,<Directory>中输入“DirectoryIndex 根目录下的文件名”,如例,则01.html被作为站点首页。
一.目录访问权限
1.集中式设置访问权限。一个站点就是一个目录,每个目录都应该给予设置“访问权限”,其基本语法如下:
<Directory "目录路径">
#设置当一个请求没有指定文件名、并且又没有默认首页的时候,显示文件目录
Options Indexs
#设置权限控制,“Allow”和“Deny”的先后顺序
#如下设置了先设置拒绝后设置允许
order Deny,Allow
#Deny设置要拒绝访问的IP,基本没什么用?换个IP就能访问了?或者“墙”有用?
#拒绝了一个IP
Deny From 178.163.3.4
#拒绝了256个IP。以以下开头的都拒绝访问。想拒绝更多,IP地址写越得短
Deny From 178.163.3
#设置允许所有访问
Allow From all
#设置访问首页,可设置多个,按顺序查找返回
DirectoryIndex 01.html 02.php
</Directory>
2.分布式设置访问权限。以上集中用Directory来设置访问权限,是很不方便地:1.每次更改都要重启Apache服务 2.每个站点地子目录,不方便就行访问权限设置。所以我们!有了分布式设置权限地方法,分两步进行设置:
- 在Directory中写上,表示允许分布式设置访问权限
AllowOverride all
- 在任意一个子目录下建立文件 .htaccess (windows下笔记本不能新建此类文件,用代码编辑器件就好了),在文件中写上拒绝或者允许的IP,写法和在Directory中是一样的
Deny From all
Allow From 178.168.3.4
二.多站点配置
多站点配置分3步进行:
- 在httpd.conf中,查找关键词 vhosts,去注释打开多站点虚拟主机配置文件项,使能够载入文件httpd-vhosts.conf
- 在conf/extra/httpd-vhosts.conf文件中,设定希望提供多站点服务的“IP地址”和“端口号”,通常端口号 默认是:*:80, * 代表所有IP端口都是80”。有些已经默认写好了,没有则自己写上。
设置端口号:
-
先把httpd-vhosts.conf里默认的两个example删除或者注释掉,就是这两个,不知道啥玩意说了例子没给默认注释掉~:
然后按照例子的格式那样在里面一个站点一个站点加上去就好了,想要多少个加多少个:
<VirtualHost *:80>
#第一个站点的信息,关键3项
#ServerAdmin,或者你用ServerName也是可以的
ServerAdmin www.xxx.com
#DocumentRoot
DocumentRoot "站点目录绝对路径"
<Directory "站点目录绝对路径">
Options Indexes
Order Deny,Allow
Allow From all
DirectoryIndex 首页文件名
</Directory>
剩下的3项就不学习了,以后有兴趣再研究
#ServerAlias项为站点别名设置
#ErrorLog项为错误日志设置
##CustomLog项为访问日志设置
</VirtualHost *80>
<VirtualHost *80>
#第二个站点的信息
</VirtualHost *:80>
在多站点配置中,第一个站点被称为默认站点,如果请求域名无法跟任何一个站点匹配,会将请求当作请求默认站点去处理。
一旦实现多站点设置,最初的默认站点就失效了,也就是localhost不能用了,嘛,可以将localhost当作普通站点名来用的嘛。
(额外提一下,设置好的主机名,要在hosts里配置上对应的IP地址才可以使用的,hosts所在目录:C:\Windows\System32\drivers\etc,以管理员方式打开写上就可以了: IP地址 对应主机名)
三.目录别名(虚拟目录)设置
- 真实目录,某个站点www.xxx.com(文件夹)下有一个目录为a1,则可以这样访问该目录,www.xxx.com/a1
- 虚拟目录,站点下不存在某目录名,却可以用同样的语法形式去访问,如站点下没有a2目录,却www.xxx.com/a2可以进行访问
设置虚拟目录的方法:
- 在httpd-vhosts.conf中一个站点的设置中,设置虚拟目录名字,以及其对应的真实目录位置
- 设置该真实目录的访问权限(所有目录都是默认禁止访问的!)
<VirtualHost *:80>
ServerAdmin www.xxx.com
DocumentRoot "站点目录绝对路径"
<Directory "站点目录绝对路径">
Options Indexes
Order Deny,Allow
Allow From all
DirectoryIndex 首页文件名
</Directory>
#设置一个虚拟目录
Alias /a2 "真实目录路径"
#设置该虚拟目录对应真实目录的访问权限
<Directory "真实目录路径">
Options Indexes
Order Deny,Allow
Allow From all
</Directory>
</VirtualHost *80>