![httpd-vhosts.conf - 为什么它有效?](https://linux22.com/image/543113/httpd-vhosts.conf%20-%20%E4%B8%BA%E4%BB%80%E4%B9%88%E5%AE%83%E6%9C%89%E6%95%88%EF%BC%9F.png)
我在 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 可以从中提供内容。您所要做的就是将其设为虚拟主机的文档根目录(正如您所拥有的)。