.htaccess限制对文件夹的访问

时间:2011-01-06 00:03:43

标签: .htaccess

我有一个继承(包含)其他PHP文件的php文件。所有继承的文件都位于一个名为“includes”的文件夹中。我希望能够限制对此文件夹的任何直接访问。只有服务器中的PHP文件才能与“includes”文件夹中的文件通信。我如何使用.htaccess来实现这样的目标?

仅供参考,我使用了以下代码并且无效

Order deny,allow
deny from all

任何帮助将不胜感激

5 个答案:

答案 0 :(得分:20)

如果您没有选择在文档根区域之外实际移动“includes”文件夹,并使用include_path(即您无法从Web访问它),请输入

deny from all

在该目录的.htaccess目录中。

但是,替代方法是使用DEFINES指令仅允许通过特定授权文件访问那些包含程序。例如,放

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

在包含文件的顶部,然后放入

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

允许包含这些文件的程序。

这可以防止那些包含文件的偶然GET运行它们,并且可以用于任何Web服务器,而不仅仅是支持htaccess文件的那些。

答案 1 :(得分:3)

在您的包含/ .htaccess中:

Order deny,allow
deny from all

答案 2 :(得分:2)

您实际上只需使用index.php并使用header()传递404标头:

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

IMO,这比403好,因为它就像文件夹不存在一样。至于包含文件,请将此行放在主文件的第一行include/require之上:

define('INCLUDED', true);

在include目录中的每个文件中,将其置于最重要的部分。

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

答案 3 :(得分:1)

您可以使用htaccess或server.config上下文中的以下指令拒绝直接访问该文件夹:

基于Mod-alias的解决方案

Redirect 403 ^/folder/.+$

这会将/ folder /的所有文件和目录重定向到403禁止错误页面。

Mod-rewrite base solution:

RewriteEngine on

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

答案 4 :(得分:0)

根据您在更高级别设置的其他可能选项,您可能需要使用:

Satisfy all
Order deny,allow
Deny from all

当上层目录定义了包括以下行的基本身份验证时,我遇到了这个:

Satisfy any

这阻止了我的所有拒绝生效,因为用户已经过身份验证。