NameVirtualHost 导致本地主机出现 404

Posted

技术标签:

【中文标题】NameVirtualHost 导致本地主机出现 404【英文标题】:NameVirtualHost causes 404 for localhost 【发布时间】:2011-07-07 19:27:18 【问题描述】:

我已经通过启用 NameVirtualHost 成功设置了多个 VirtualHost。这是我的 vhosts.conf 的顶部

NameVirtualHost *:80

<VirtualHost *:80>
  ServerName mysite.local
  ...
</VirtualHost>

问题是当我访问http://localhost 时,我得到默认的“它可以工作!”。如果我去http://127.0.0.1/它默认为http://mysite.local

我从 Apache Docs 了解到为什么它默认为 mysite.local(匹配第一个 VirtualHost)。但是我以前可以去http://localhost/phpmyadmin/

我怎样才能找回它?我需要制作我的第一个 VirtualHost 本地主机吗?好像不对……

在 Mac OS X (10.6.6) 上运行 apache 2.2.15。

更新

如果我从我的 hosts 文件中注释掉以下行,则 localhost 和 127.0.0.1 都会转到同一个地方。我在访问日志中验证它确实在使用 ::1。

::1             localhost
fe80::1%lo0     localhost

所以我想这可以解决第一个问题,前提是这样可以吗?但是如何让 localhost 转到我的默认 DocumentRoot?

【问题讨论】:

【参考方案1】:

不,您不能将 VirtualHosts 与“经典”配置混合使用。 您可以在另一个端口上侦听并定义另一个 VirtualHost(例如 *:8080)“模拟”您之前的“localhost”进入您的一般 DocumentRoot 声明。

类似这样的:

Listen 80 (already declared elsewhere)
Listen 8080
NameVirtualHost *:80
NameVirtualHost *:8080

<VirtualHost *:80>
  ServerName mysite.local
  ...
</VirtualHost>

<VirtualHost *:8080>
  ServerName localhost
  DocumentRoot /same/as/the/classic/one/
  ...
</VirtualHost>

您还可以声明一些别名 /phpmyadmin/ 这将是全局的,但我不推荐使用别名,因为您的虚拟主机中不能有另一个 phpmyadmin 文件夹。

你当然可以定义一个 phpmyadmin.local vhost ;-)

【讨论】:

我想最后我只是想确保我的设置没有破坏任何东西。正如你所说,似乎没有办法混合。在我有几个 utility 应用程序(如 phpmyadmin 等)作为我的一般文档根目录中的子目录之前。所以我只需要把它们放在其他地方,作为另一个端口下的 localhost,或者为每个端口创建特定的虚拟主机? 对我来说,最好的方法是为每个实用程序应用创建一个虚拟主机。您可能想要使用 clickontyler.com/virtualhostx ;-)【参考方案2】:

我怎样才能找回它?我需要制作我的第一个 VirtualHost 本地主机吗?好像不对……

我就是这样做的,一切似乎都工作得很好,不需要额外的端口来监听。

第一个 VirtualHost 块 处理任何不指向我设置的 2 个虚拟主机(第 2 和第 3 个 VirtualHost 块)之一的 URL:

<VirtualHost *:80>
    ServerAdmin webmaster@localhost
    DocumentRoot "/Applications/XAMPP/xamppfiles/htdocs/"
    ServerName localhost
    ServerAlias localhost
</VirtualHost>

<VirtualHost *:80>
    ServerAdmin webmaster@localhost
    DocumentRoot "/Applications/XAMPP/xamppfiles/htdocs/imputation/dirmaster/http/"
    ServerName imputation.loc

    <Directory "/Applications/XAMPP/xamppfiles/htdocs/imputation/dirmaster/http/">
        Options Indexes FollowSymLinks Includes ExecCGI
        AllowOverride All
        Order allow,deny
        Allow from all
    </Directory>
</VirtualHost>

<VirtualHost *:80>
    ServerAdmin webmaster@localhost
    DocumentRoot "/Applications/XAMPP/xamppfiles/htdocs/documentatiebestand/"
    ServerName documentatiebestand.loc

    <Directory "/Applications/XAMPP/xamppfiles/htdocs/documentatiebestand/">
        Options Indexes FollowSymLinks Includes ExecCGI
        AllowOverride All
        Order allow,deny
        Allow from all
    </Directory>
</VirtualHost>

【讨论】:

以上是关于NameVirtualHost 导致本地主机出现 404的主要内容,如果未能解决你的问题,请参考以下文章

Apache 虚拟主机NameVirtualHost

在虚拟主机中创建别名目录

如何从 Apache .htaccess 创建虚拟主机?

apache虚拟主机配置

OS X Mavericks 上支持 SSL 的虚拟主机

从本地主机导出 drupal 站点会导致丢失表