带有 Windows 主机名的 Apache Virtualhost 条目

带有 Windows 主机名的 Apache Virtualhost 条目

我有一个 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 将为未明确匹配ServerNameServerAlias 指令的名称选择第一个定义的虚拟主机,因此您需要在配置文件中为主主机创建一个条目任何其他VirtualHost块。

答案2

我认为您还需要为 endymion 创建一个虚拟主机条目,例如:

<VirtualHost *:80>
        DocumentRoot /var/www/example
        ServerName endmymion
        ServerAlias endmymion
</VirtualHost>

当然使用默认vhost 也按照上面的评论工作。

相关内容