httpd-vhosts.conf - 为什么它有效?

httpd-vhosts.conf - 为什么它有效?

我在 Windows 7 上运行 Apache 2.28,这是我的目录结构:

C:/

www(其中包含 Apache 服务器,它是免费的 Web 开发人员服务器套件,其默认配置为 C:/www/)

虚拟主机

虚拟主机.1

虚拟主机.2

我在 httpd-vhosts.conf 中添加了以下内容:

    <Directory C:/www/vhosts.1>   
  Order Deny,Allow   
Allow from all 
</Directory>
   <Directory C:/www/vhosts.2>   
Order Deny,Allow   
Allow from all 
</Directory>

但只是为了测试我是否可以将它们放在任何地方,我添加了一个虚拟主机,将域添加到 HOSTS 文件,并将其放在 C:/www(主 webroot)中。

这是我添加的最新域名:

<VirtualHost *:80>
    ServerName  testing-server-win7.co.uk
              ServerAlias  www.testing-server-win7.co.uk
    DocumentRoot /www/testing-server-win7.co.uk
    ErrorLog /www/Apache22/logs/error.log

<Directory "/www/testing-server-win7.co.uk">
    Options All
    AllowOverride All
    order allow,deny
    allow from all
</Directory>

并且令人惊奇的是,它确实有效。

为什么会这样?你真的可以把它们放在 Apache 上的任何地方吗?

顺便说一句,这是一个开发服务器,不向互联网开放 - 尽管计算机可以访问互联网。

有人在这里尝试过这个吗?它对他们有用吗?

谢谢

答案1

我猜你需要改变你用于 c: 的斜杠的方向 - 它应该是 C:\ 而不是你现在的 C:/

答案2

HTTP 协议有一个标头字段称为主机。这就是虚拟主机成为可能的原因。

您的浏览器尝试访问 testing-server-win7.co.uk,您的 hosts 文件会将其转换为相应的 ip。
除了向该 ip 发送 HTTP GET 请求外,它还会发送主机名(通过使用 Host 标头字段),这乍一看似乎有些多余,“服务器肯定知道自己的名字”。

Apache 可以读取这些信息并确定您要访问哪个站点。然后它会将该网站提供给您。


来自文档

The <Directory> and <Files> directives, along with their regex counterparts, apply directives to parts of the filesystem. Directives enclosed in a <Directory> section apply to the named filesystem directory and all subdirectories of that directory.

换句话说,如果您<Directory>在配置文件中使用标签引用文件系统的目录,Apache 可以从中提供内容。您所要做的就是将其设为虚拟主机的文档根目录(正如您所拥有的)。

相关内容