欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  网络运营

Apache配置虚拟目录和多主机头的方法

程序员文章站 2023-09-03 14:52:18
了解一下根目录和虚拟目录的关系: 安装过apache之后打开httpd.conf文件会发现documentroot默认设置的应该是apache安装目录中的htdocs文件...

了解一下根目录和虚拟目录的关系:
安装过apache之后打开httpd.conf文件会发现documentroot默认设置的应该是apache安装目录中的htdocs文件夹。然后你的网页就可以放大这个htdocs文件夹中测试,例你在里面放了一个1.php,可以输入http://127.0.0.1/1.php进行测试。这个documentroot后面的路径就是apache的根目录。有时候我们不想将自己的网站放到这里,例如我想要放到f:/myphp中来运行,那么就可以修改documentroot为f:/myphp,然后将那个1.php放入f:/myphp文件夹,同样使用可以正常访问。

虚拟目录是什么?顾名思义只是一个虚拟的目录,和真实目录是有差别的。先来看看使用真实目录访问,我们在刚才的f:/myphp中建立一个文件夹test,然后在里面放入2.php,这个时候就可以通过http://127.0.0.1/test/2.php访问。但是有些时候你可能建立的文件夹和想要输入的访问地址有一个映射关系,而不是直接输入test文件夹名,这样做的原因有很多其中就有一个是安全问题,因为那样别人就会知道你的根目录的文件夹。具体点,你在test文件夹中放置了2.php,但是想要通过http://127.0.0.1/cmj/2.php访问2.php而不是通过http://127.0.0.1/test/2.php来访问怎么办呢?这个时候我们就需要虚拟目录了,很明显没有cmj这个文件夹,但是又能够像访问一个正式的目录一样来访问,就需要一种映射关系。

多个虚拟目录

  首先把apache安装到d:\program files\apache2.2目录下,端口号设置为8080,安装完成后默认的网站根目录为d:\program files\apache2.2\htdocs,通常我们可以在htdocs下面建立个文件夹mysite,然后在浏览器输入:http://localhost:8080/mysite 这样就可以看到我们自己的站点了。然而有时我们想把站点放到其它目录下面,这时就需要配置虚拟目录了
比如我们在d盘建立如下文件夹d:\code\website,然后通过http://localhost:8080/demosite来访问这个站点

打开httpd.conf文件,搜索<ifmodule alias_module> 节点,然后在节点内输入以下内容:

#下面是虚拟目录声明格式
#alias用来定义虚拟目录及虚拟目录路径,其中虚拟目录名称用于url访问的路径别名,可以和虚拟目录名称不同
#<directory/>节点用于定义目录的访问权限等
#
#alias 虚拟目录名称 虚拟目录路径
#<directory 虚拟目录路径>
#  options indexes followsymlinks
#  allowoverride all
#  order allow,deny
#  allow from all
#</directory>

#下面是具体的示例,/demosite是目录别名 "d:/code/website"是虚拟目录的实际路径
alias /demosite "d:/code/website"

<directory "d:/code/website">
  options indexes followsymlinks
  allowoverride all
  order allow,deny
  allow from all
</directory>

重启apache服务后,在浏览器输入http://localhost:8080/demosite就可以正常访问了
这里需要注意下目录尽量使用"/",而不是使用"\",原因就是"\"代表转义符有些情况下会导致莫名奇妙的错误,下面附上完整的<ifmodule alias_module>节点以供参考

<ifmodule alias_module>
  #
  # redirect: allows you to tell clients about documents that used to 
  # exist in your server's namespace, but do not anymore. the client 
  # will make a new request for the document at its new location.
  # example:
  # redirect permanent /foo http://localhost/bar

  #
  # alias: maps web paths into filesystem paths and is used to
  # access content that does not live under the documentroot.
  # example:
  # alias /webpath /full/filesystem/path
  #
  # if you include a trailing / on /webpath then the server will
  # require it to be present in the url. you will also likely
  # need to provide a <directory> section to allow access to
  # the filesystem path.

  #
  # scriptalias: this controls which directories contain server scripts. 
  # scriptaliases are essentially the same as aliases, except that
  # documents in the target directory are treated as applications and
  # run by the server when requested rather than as documents sent to the
  # client. the same rules about trailing "/" apply to scriptalias
  # directives as to alias.
  #
  scriptalias /cgi-bin/ "d:/program files/apache2.2/cgi-bin/"
  
  alias /demosite "d:/code/website"

  <directory "d:/code/website">
    options indexes followsymlinks
    allowoverride all
    order allow,deny
    allow from all
  </directory>
</ifmodule>

多主机头绑定
(就是在一个端口上绑定多个域名,然后每个域名可以指向不同的目录进行访问,主机头是iis里面的说法),打开httpd.conf文件,在文件最后添加如下内容

#多主机头配置无需放在特定的节点下面,一般直接在配置文件底部添加即可
#namevirtualhost addr[:port] 为一个基于域名的虚拟主机指定一个ip地址(和端口)
#声明主机头必须加这条指令,否者主机头配置不会生效
#virtualhost节点下面servername就是要绑定的域名,documentroot表示此域名指向的目录
#本机测试的话请在hosts中进行域名绑定如 127.0.0.1 www.mysite1.com

namevirtualhost *:8080
<virtualhost *:8080>
  servername www.mysite1.com
  documentroot "d:\program files\apache2.2\htdocs"
</virtualhost>

<virtualhost *:8080>
  servername www.mysite2.com
  documentroot "d:\code\mysite"
</virtualhost>

配置好后,重启apache服务,浏览器输入www.mysite1.com:8080,就会自动定向到d:\program files\apache2.2\htdocs站点了

输入就会自动定向到d:\code\mysite站点,如此就可以实现在一个服务器上同时运行多个站点