2011-01-06 169 views
11

我有一個PHP文件,繼承(包括)另一個PHP文件。所有繼承的文件都位於一個名爲「includes」的文件夾中。我希望能夠限制對此文件夾的任何直接訪問。只有服務器中的PHP文件可以與「includes」文件夾中的文件進行通信。我如何使用.htaccess來實現這樣的目標?.htaccess限制訪問文件夾

僅供參考,我用下面的代碼,並沒有奏效

Order deny,allow 
deny from all 

任何幫助將在您的理解

+0

如果這不起作用,可能是因爲httpd.conf中設置爲不讀.htaccess文件。例如: <目錄 「/路徑/到/ webfiles」> 的AllowOverride無 切換到別的東西(例如設置AllowOverride所有),並重新啓動Web服務器。 – user535673 2013-04-29 10:01:09

回答

19

如果你不具備實際移動選項「包括」文檔根區域以外的文件夾,並使用包含路徑(即你無法從網上得到它),然後輸入

deny from all 

在該目錄中的.htaccess目錄中。

但是,替代方法是使用DEFINES指令僅允許通過特定授權文件訪問這些包含程序。例如,把

<?php defined('ACCESS_ALLOWED') or die('Restricted Access'); ?> 

在包含文件的頂部,然後把

<?php define('ACCESS_ALLOWED', 1); ?> 

在被允許包含這些文件的程序。

這將防止包含文件的偶然GET運行它們,並且適用於任何Web服務器,而不僅僅是那些支持htaccess文件的服務器。

3

包括/的.htaccess:

Order deny,allow 
deny from all 
+0

試過但沒有工作 – 2011-01-06 00:13:51

2

可以真正地使用index.php並使用header()傳遞404標頭:

header('HTTP/1.1 404 Not Found', 404); 

IMO,這比403好,因爲它就像文件夾不存在。而對於包括文件,把這個線以上第一include/require行的主要文件:

define('INCLUDED', true); 

而就在包括目錄中的所有文件,把這個在最上面的部分。

if (!defined(INCLUDED)) { 
    header('HTTP/1.1 404 Not Found', 404); 
} 
+2

您可能還想調用exit();在標題之後,因爲頁面仍然可以執行。 – 2012-10-31 22:55:38

0

根據設定在更高層次上其他可能的選項,你可能需要使用:

Satisfy all 
Order deny,allow 
Deny from all 

我就遇到了這個當上目錄中定義的基本認證,包括該行:

Satisfy any 

這正在阻止我的否認從所有人的生效,因爲用戶被認證。

1

您可以在htaccess或服務器中使用以下指令拒絕直接訪問該文件夾。配置CONTEX:

MOD-別名基礎的解決方案

Redirect 403 ^/folder/.+$ 

這將重定向所有文件和/文件夾/ 403禁止錯誤頁面的顯示目錄。

國防部重寫基礎的解決方案:

RewriteEngine on 

RewriteRule ^/?folder/.+$ - [F]