允許在查看目錄時列出文件,但在直接訪問時受保護(通過 HTTP 身份驗證)
.htaccess
我使用and創建了一個受密碼保護的目錄.htpasswd
,但是當我轉到目錄 URL 時,這些文件沒有顯示出來。我有這個
.htaccess
:#Protect multiple files <FilesMatch "^(.*).csv$"> AuthName "Dialog prompt" AuthType Basic AuthUserFile /xxxxx/test #AuthUserFile ".htpasswd" Require valid-user </FilesMatch>
**更新:**我正在保護該目錄中的 CSV 文件。當設置了 auth 指令時,它們會從目錄列表中消失。當我刪除它時,它們會出現。我希望至少能夠看到目錄列表中的文件,但是在訪問這些文件時,它會提供身份驗證提示。
我正在保護該目錄中的 CSV 文件。當設置了 auth 指令時,它們就會消失。當我刪除它時它會顯示出來。我希望至少能夠看到這些文件,但是在訪問這些文件時,它會提供一個身份驗證提示。
當使用 mod_autoindex 生成目錄列表時,會為目錄列表中出現的每個文件發出一個內部子請求。當使用
<FilesMatch "^(.*).csv$">
容器時,它也正在為這些子請求處理,因此目錄列表中這些文件的條目也被阻止。使用該
<FilesMatch>
指令的另一種方法是使用<If>
表達式並針對THE_REQUEST
伺服器變數進行測試。只有當使用者實際請求文件而不是瀏覽目錄列表時,這才會成功。.csv
例如:
# Directory listings (mod_autoindex) need to be enabled Options +Indexes # Protect CSV files from being accessed, but still visible in directory listing <If "%{THE_REQUEST} =~ m#\.csv(\s|\?)#"> AuthName "Dialog prompt" AuthType Basic AuthUserFile /xxxxx/test Require valid-user </If>
THE_REQUEST
包含 HTTP 請求的第一行。例如。GET /foo/test.csv HTTP/1.1
(在 GET 請求的情況下/foo/test.csv
) - 並且在整個請求過程中不會改變。因此,當請求目錄本身時,例如。/foo/
然後不處理封閉的塊,並且不阻止這些文件的列表。增加的複雜性是
THE_REQUEST
包含請求的整個 URL,其中可能包括查詢字元串。因此,檢查(\s|\?)
(即空格或文字?
)是為了避免通過簡單地包含查詢字元串來繞過密碼檢查。例如。/foo/test.csv?anything
.