2012-01-02 61 views
11

我有一個受htaccess保護的目錄。這裏是我現在使用的代碼:在htaccess保護的目錄中排除一個文件夾

AuthName "Test Area" 
Require valid-user 
AuthUserFile "/***/.htpasswd" 
AuthType basic 

這工作正常。但是,我現在在該文件夾內有一個目錄,我想允許任何人訪問,但不知道如何操作。

我知道可以將文件移動到受保護的目錄之外,但是要簡短地說明文件夾需要保留在受保護的文件夾內,但所有人都可以訪問。

如何限制對文件夾的訪問,但允許訪問子文件夾?

回答

11

根據this article,您可以使用SetEnvIf來完成此操作。你匹配你想要訪問的每個文件夾和文件,併爲它們定義一個環境變量'allow'。然後添加一個允許訪問的條件,如果此環境變量存在。

您需要將以下指令添加到.htaccess。

SetEnvIf Request_URI "(path/to/directory/)$" allow 
SetEnvIf Request_URI "(path/to/file\.php)$" allow 
Order allow,deny 
Allow from env=allow 
Satisfy any 
+0

感謝您的幫助! – 2012-01-02 06:23:17

+0

@SherwinFlight我遵循上面的代碼,但仍然問密碼,如何排除目錄上傳圖片 – Nullpointer 2016-02-17 07:08:00

+0

謝謝你,仍然工作。 – 2017-05-05 14:51:19

24

與內容子目錄只需創建一個.htaccess文件:

Satisfy any

+3

這可以工作,但如果沒有目錄,因爲mod_rewrite的東西。 – janw 2015-02-05 13:57:25

+0

把它放在區塊 – Greg 2016-08-11 18:57:42

0

沒有必要在子目錄創建的.htaccess

,因爲你需要與SetEnvIf之後指令只需要創建儘可能多的變量,並且一定要ALLW /拒絕的文件名或路徑名是傳遞給SetEnvIf之後的URI正則表達式的一部分,酷似@ Sumurai8說,但設置正則表達式以滿足您的需求,因爲URI應該開始/結束/包含一組字符............

0

接受的答案似乎並沒有很好地運行Apache版本,因爲一旦我的一些客戶服務器上推出了Apache更新,它就停止了工作。

我推薦以下方法:

AuthType Basic 
AuthName "NO PUBLIC ACCESS" 
AuthUserFile /xxx/.htpasswd 

SetEnvIf REQUEST_URI "(path/to/directory/)$" ALLOW 

<RequireAny> 
    Require env ALLOW 
    Require valid-user 
</RequireAny> 
相關問題