![带有 Windows 主机名的 Apache Virtualhost 条目](https://linux22.com/image/580562/%E5%B8%A6%E6%9C%89%20Windows%20%E4%B8%BB%E6%9C%BA%E5%90%8D%E7%9A%84%20Apache%20Virtualhost%20%E6%9D%A1%E7%9B%AE.png)
我有一个 Windows 域控制器,我们将其用作内部网络的 DNS。我有一个 Ubuntu 盒子,其 IP 地址为 172.16.34.149。在 Windows DNS 中,我为名称 Endymion 创建了正向和反向查找条目。
自然,每当我通过 FTP/SSH/HTTP/等访问主机名 Endymion 时,它都会正确解析为我的 Ubuntu 机器。
我想在这个机器上为一个现有网站进行一些 Web 开发。当我将网站放在 /var/www/ 的子文件夹中时,出现了问题。假设它在文件夹 /var/www/projectx/ 中。问题涉及非相对 URL 的错误解析。
因此我认为我可以为主机名 projectx 创建一个新的 DNS 条目。果然,当我通过 FTP/SSH/HTTP/etc 访问主机名 projectx 时,它会将我带到与主机名 Endymion 相同的 ubuntu 框...这正是我所期望的。我现在为同一个框有两个主机名。
然后我在 httpd.conf 中创建一个 Virtualhost 条目,如下所示:
<VirtualHost *:80>
DocumentRoot /var/www/projectx
ServerName projectx
ServerAlias projectx
</VirtualHost>
果然,当我进入浏览器并输入http://projectx/它会带我到正确的子文件夹。一切正常!
别这么快。
然后我去http://endymion/并且不会将我带到 /var/www/,而是将我带到 /var/www/projectx/
显然我遗漏了一些东西。请帮忙!;)
答案1
查看 Apache 文档基于名称的虚拟主机,你会发现以下信息:
主要宿主消失
如果您要将虚拟主机添加到现有 Web 服务器,还必须为现有主机创建一个块。此虚拟主机中包含的 ServerName 和 DocumentRoot 应与全局 ServerName 和 DocumentRoot 相同。在配置文件中首先列出此虚拟主机,以便它充当默认主机。
换句话说,只要你创建一虚拟主机,主服务器配置中的 DocumentRoot 变得无关紧要。Apache 将为未明确匹配ServerName
或ServerAlias
指令的名称选择第一个定义的虚拟主机,因此您需要在配置文件中为主主机创建一个条目前任何其他VirtualHost
块。
答案2
我认为您还需要为 endymion 创建一个虚拟主机条目,例如:
<VirtualHost *:80>
DocumentRoot /var/www/example
ServerName endmymion
ServerAlias endmymion
</VirtualHost>
当然使用默认vhost 也按照上面的评论工作。