Apache-2.4

為什麼虛擬主機出錯時 htdocs 不顯示目錄?

  • March 5, 2022

我剛剛在新的 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文件指向 ServerName)。

我應該提到我正在htdocs從不同的驅動器對目錄進行符號連結,但是我在另一台沒有遇到相同問題的 Windows 機器上進行了非常相似的設置。

如何修復它以便htdocs始終顯示目錄列表,即使子目錄/虛擬主機有錯誤?

看來,預設情況下,伺服器在轉到localhost根目錄時會為虛擬主機文件中的最頂層站點提供服務。解決方案是為根 htdocs 目錄本身包含一個虛擬主機。 httpd-vhosts.conf

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

有了這個在我的虛擬主機文件的底部,localhost無論如何都會返回一個目錄列表。

引用自:https://serverfault.com/questions/1095243