Apache-2.4

將目錄索引限制為經過身份驗證的使用者

  • December 10, 2019

本質上,我要做的是將目錄索引限制為來自我的 Apache 伺服器上的 htpasswd 文件的經過身份驗證的使用者。這是我到目前為止所擁有的。

AuthUserFile C:\XXXXXXXXX\htpasswd
AuthGroupFile /dev/null
AuthName "Password Protected!"
AuthType Basic
<Limit DirectoryIndex>
require valid-user
</Limit>

如果我將“DirectoryIndex”替換為“GET POST”,我已經確認這種身份驗證適用於普通目錄訪問或文件。我嘗試通過將 DirectoryIndex 放在那裡進行猜測,但它似乎不起作用。在Google上搜尋了這個問題並查看了關於 serverfault 的其他一些問題後,我很茫然。如果有人知道如何做到這一點,那就太好了。

謝謝。

DirectoryIndex(mod_dir 的一部分)設置在客戶端請求目錄時服務的文件。因此,要限制對該文件的訪問,您需要使用<Files>(或<FilesMatch>)指令。(您不能引用DirectoryIndex指令引用的任何文件。)

例如,如果您DirectoryIndex的設置為index.html,則:

<Files "index.html">
   AuthUserFile C:\XXXXXXXXX\htpasswd
   AuthGroupFile /dev/null
   AuthName "Password Protected!"
   AuthType Basic
   Require valid-user
</Files>

如果您有多個可能的DirectoryIndex文件,那麼您可以使用一個<FilesMatch>容器,而不是使用一個正則表達式作為其參數。例如,如果DirectoryIndex index.php index.html設置了則:

<FilesMatch "^index\.(html|php)$">
   # etc.
</FilesMatch>

或者,通過“目錄索引”,您是指生成的目錄列表(mod_autoindex)嗎?但這與DirectoryIndex它本身沒什麼關係,除了(如果啟用)目錄列表僅在DirectoryIndex文件不存在時生成。

在這種情況下,為了只保護目錄列表(即裸目錄),您也可以使用Files容器,但指定一個空文件。例如:

# Protect directory-listing only
<Files "">
   # etc.
</Files>

<Limit DirectoryIndex>

Limit指令將隨附的指令限制為規定的 HTTP請求方法(即 GET、POST 等)。DirectoryIndex是 Apache 指令,而不是 HTTP 請求方法,所以這是無效的。

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