我有一个继承(包含)其他PHP文件的php文件。所有继承的文件都位于一个名为“includes”的文件夹中。我希望能够限制对此文件夹的任何直接访问。只有服务器中的PHP文件才能与“includes”文件夹中的文件通信。我如何使用.htaccess来实现这样的目标?
仅供参考,我使用了以下代码并且无效
Order deny,allow
deny from all
任何帮助将不胜感激
答案 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
这阻止了我的所有拒绝生效,因为用户已经过身份验证。