我刚刚在新的 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
无论如何都会返回一个目录列表。