这是场景:
-
根文件夹中有一个
index.php
文件 -
index.php
中的某些文件包含在includes
文件夹中 . -
1其他文件(
submit.php
)位于表单提交操作的根文件夹中 .
我想限制htaccess直接用户访问 includes
文件夹中的文件 . 也适用于 submit.php
. 但是include将适用于 index.php
文件 . 例如,如果用户键入 www.domain.com/includes/somepage.php
,它将限制它(可能会重定向到错误页面) .
7 回答
我只是将
includes
文件夹移出web-root,但是如果你想阻止直接访问整个includes
文件夹,你可以将.htaccess
文件放在包含以下内容的文件夹中:这样你就无法打开该文件夹中的任何文件,但是你可以将它们包含在php中而不会出现任何问题 .
这是纯粹基于
mod_rewrite
的解决方案:如果URI包含
/includes/
或/submit.php
,这将显示禁止使用的错误可以使用Files指令并禁止访问所有文件,然后再次使用它来设置可访问的文件:
1个基于mod_alias的衬里解决方案:
这将显示/folder/file.php的禁止错误
如果我理解正确你只想拒绝访问包含文件夹?
带有'DENY FROM ALL'指令的.htaccess放在includes文件夹中就可以了 .
你的Q分为两部分,jeroen和anubhava 's solutions work for part I -- denying access to /includes. anubhava'也适用于第二部分 . 我更喜欢后者,因为无论如何我都使用
DOCROOT/.htaccess
,这将所有这些控制保存在一个文件中 .然而,我想要讨论的是“拒绝访问
submit.php
”的概念 . 如果您不想使用submit.php
那么为什么要在DOCROOT中使用它?我怀疑这里的答案是你在某些形式中将它用作动作目标,并且只希望在提交表单时触发它而不是直接触发,例如来自一个spambot .如果这是真的那么你可以't use anubhava'的第二部分,因为这将导致你的表单失败 . 你可以在这里做的是(i)使用
.htaccess
检查以确保引用者是你自己的索引页面:并且(ii)在您的PHP index.php表单生成器中包含一些用于时间戳和验证的隐藏字段 . 例如,验证可以是时间戳的MD5的前10个字符和一些内部秘密 . 在处理提交时,您可以(i)验证时间戳和验证匹配,以及(ii)时间戳在当前时间的15分钟内 .
这可以防止垃圾邮件,因为垃圾邮件制造者可以获得有效的时间戳/验证对的唯一实用方法是解析表单,但这种刮擦只有15分钟的生命 .
根据在更高级别设置的其他可能选项,您可能需要将以下内容放在include目录中的.htaccess文件中:
当上层目录定义了包括以下行的基本身份验证时,我碰到了这个:
由于用户已通过身份验证,这可以防止我拒绝全部生效 .