2013-10-01 184 views
68

我試圖通過操縱URL來拒絕用戶訪問「site/includes」文件夾。 我不知道是否必須否決所有事情,並手動進行個別例外以允許,如果我可以拒絕這個文件夾,或者是否有可以使用的重寫函數。拒絕訪問.htaccess中的一個特定文件夾

具體示例:我不想通過在URL中輸入「localhost/site/includes」來查看目錄文件。

+1

只是禁止列出目錄寫入位於根文件夾 – 2013-10-01 14:15:33

回答

111

創建site/includes/.htaccess文件,加入這一行:

Deny from all 
+1

嘿.htaccess文件'選項-Indexes'! anubhava我用這個來禁止直接訪問我的api文件裏面的/ api文件夾,但現在所有的web服務調用發送403禁止狀態..我只是想阻止訪問,當有人從瀏覽器訪問它。 – ravisoni

+3

對於網絡服務器來說,瀏覽器和非瀏覽器之間的請求之間沒有真正的區別。 – anubhava

+0

我使用nginx,我不能使用'.htaccess'。那麼,如何在沒有'.htaccess'的情況下做到這一點?謝謝 – Shafizadeh

22

.htaccess文件,你需要使用

Deny from all 

site/includes/.htaccess將這個以使其具體到includes目錄

如果您只是想禁止列出目錄文件,您可以使用

Options -Indexes 
6

Deny from all 

,或者您可以重定向到一個自定義404頁,您可以創建該文件夾的.htaccess文件,至極應該拒絕訪問

Redirect /includes/ 404.html 
2

除了這些安全建議的方法,我也可以發佈。如果目錄沒有被動態地創建,那麼做一個調整和不太安全的方法。

將空白的index.html文件,目錄 :)

,如果你是動態創建目錄:

mkdir($dirname, 0644); 
+1

這不會拒絕訪問目錄中的文件,只是阻止它們被列出。 –

2

創建的index.php,index.html的,index.htm的是不安全。因此,任何人都可以通過猜測文件名來訪問指定目錄中的文件。例如:http://yoursite.com/includes/file.dat 因此,建議的方法是創建一個.htaccess文件來拒絕所有訪問者;)。玩的開心 !!

4

你也可以把這個IndexIgnore *在你的根.htaccess文件來禁用所有網站的目錄包括的文件列表子DIR

+0

這是正確的解決方案,運行良好 – Elby

+3

這不會禁用文件列表,但會告訴autoindexer在構建索引時忽略所有文件。要禁用文件列表,你可以使用'Options -Indexes'。 –

4

我們將設置該目錄是所有類型的文件非常安全,拒絕訪問。以下是您想要插入.htaccess文件的代碼。

Order Allow,Deny 
Deny from all 

由於我們現在已經設置了安全性,我們現在要允許訪問我們所需的文件類型。爲此,請將以下代碼添加到您剛插入的安全代碼下的.htaccess文件中。

<FilesMatch "\.(jpg|gif|png|php)$"> 
Order Deny,Allow 
    Allow from all 
</FilesMatch> 

最終.htaccess文件看起來像

Order Allow,Deny 
Deny from all 

<FilesMatch "\.(jpg|gif|png|php)$"> 
Order Deny,Allow 
    Allow from all 
</FilesMatch> 

來源從Allow access to specific file types in a protected directory

8

您也可以使用RedirectMatch

拒絕訪問的文件夾下面的行添加到htaccess的

RedirectMatch 403 ^/folder/?$ 

這將返回一個錯誤403 forbidden爲文件夾,即:http://example.com/folder/但利己阻止訪問文件和文件夾文件夾中,如果你想阻止的文件夾內的所有內容,然後就在正則表達式模式更改爲^/folder/.*$

另一種選擇是mod-rewrite 如果url-rewrting-module啓用,你可以使用像在root/.htaccss如下:

RewriteEngine on 

RewriteRule ^folder/?$ - [F,L] 

這將在內部映射爲folderforbidden錯誤頁面的請求。

+1

對於Apache 2.22,最好的解決方案是第一個:RedirectMatch ..... – John

+2

RedirectMatch 404^/文件夾/?$也可以工作 –

+1

更喜歡這個答案,而不是在我需要的每個目錄中創建多個'.htaccess'文件拒絕訪問。 – danMad

1

您可以動態地做到這一點的方法:

mkdir($dirname); 
@touch($dirname . "/.htaccess"); 
    $f = fopen($dirname . "/.htaccess", "w"); 
    fwrite($f, "deny from all"); 
fclose($f); 
相關問題