为什么虚拟主机出现错误时 htdocs 不显示目录?

为什么虚拟主机出现错误时 htdocs 不显示目录?

我刚刚在新的 Windows 机器上安装了 Apache v2.4、PHP 和 MySQL。我只对 做了一些更改httpd.conf。我包括httpd-vhosts.conf,其中定义了 2 个自定义站点(我dummy从中删除了默认站点),这两个站点都是 WordPress 站点。

其中一个 WordPress 网站没有数据库,当我进入htdocs根目录时,我看到该网站的数据库连接错误。当我注释掉DocumentRoot虚拟主机的行时,目录列表再次显示出来。

以下是所有Directory与 相关的行httpd.conf(按顺序):

Define SRVROOT "C:/webserv/Apache24"

ServerRoot "${SRVROOT}"

<Directory />
    AllowOverride none
    Require all denied
</Directory>

DocumentRoot "${SRVROOT}/htdocs"
<Directory "${SRVROOT}/htdocs">
    Options Indexes FollowSymLinks
    AllowOverride All
    Require all granted
</Directory>

<Directory "${SRVROOT}/cgi-bin">
    AllowOverride None
    Options None
    Require all granted
</Directory>

以下是导致问题的虚拟主机:

<VirtualHost *:80>#gutenberg
    DocumentRoot "${SRVROOT}/htdocs/gutenberg"
    ServerName gutenberg.squarestarmedia.ie
    ErrorLog "logs/gutenberg.localhost-error.log"
</VirtualHost>

(请注意,我正在使用我的hosts文件指向服务器名称)。

我应该提到,我正在htdocs从不同的驱动器对目录进行符号链接,但我在另一台 Windows 机器上有一个非常相似的设置,没有遇到同样的问题。

我该如何修复它以便htdocs始终显示目录列表,即使子目录/虚拟主机有错误?

答案1

看起来,默认情况下,服务器在转到根目录时会为虚拟主机文件中的最顶层站点提供服务localhost。解决方案是为根 htdocs 目录本身包含一个虚拟主机。 httpd-vhosts.conf

<VirtualHost *:80>#
    DocumentRoot "${SRVROOT}/htdocs"
    ServerName localhost
    ErrorLog "logs/localhost-error.log"
</VirtualHost>

有了这个,在我的虚拟主机文件底部,localhost无论如何都会返回一个目录列表。

相关内容