以下是该方案:
index.php
个文件
index.php
文件夹中的includes
。submit.php
)位于根文件夹中,用于表单提交操作。我想通过htaccess限制用户直接访问includes
文件夹中的文件。也适用于submit.php
。但include将适用于index.php
文件。
例如,如果用户键入www.domain.com/includes/somepage.php
,则会限制它(可能会重定向到错误页面)。
答案 0 :(得分:256)
我只是将includes
文件夹移出web-root,但是如果要阻止对整个includes
文件夹的直接访问,可以将.htaccess
文件放入该文件夹只包含:
deny from all
这样你就无法打开该文件夹中的任何文件,但你可以将它们包含在php中而不会出现任何问题。
答案 1 :(得分:51)
这是基于mod_rewrite
的纯解决方案:
RewriteRule ^(includes/|submit\.php) - [F,L,NC]
如果URI包含/includes/
或/submit.php
答案 2 :(得分:13)
基于mod_alias的1个解决方案:
RedirectMatch 403 ^/folder/file.php$
这将显示/folder/file.php
的禁止错误答案 3 :(得分:9)
如果我理解正确,您只想拒绝访问包含文件夹?
带有'DENY FROM ALL'指令的.htaccess放在包含文件夹中就行了。
答案 4 :(得分:8)
你的Q分为两部分,jeroen和anubhava的解决方案都适用于第一部分 - 拒绝访问/包含。 anubhava也适用于第二部分。我更喜欢后者,因为我总是使用DOCROOT/.htaccess
,这样就可以将所有这些控制保存在一个文件中。
然而,我想要讨论的是“拒绝访问submit.php
”的概念。如果您不想使用submit.php
那么为什么要在DOCROOT中使用它?我怀疑这里的答案是你在某些形式中将它用作动作目标,并且只希望在提交表单时触发它而不是直接触发,例如来自spambot。
如果这是真的那么你就不能使用anubhava的第二部分,因为这会导致你的表单失败。
你可以在这里做的是(i)使用.htaccess
检查以确保引荐者是你自己的索引页面:
RewriteCond %{HTTP_REFERRER} !=HTTP://www.domain.com/index.php [NC]
RewriteRule ^submit\.php$ - [F]
并且(ii)在您的PHP index.php表单生成器中包含一些用于时间戳和验证的隐藏字段。例如,验证可以是时间戳的MD5的前10个字符和一些内部秘密。在处理提交时,您可以(i)验证时间戳和验证匹配,以及(ii)时间戳在当前时间的15分钟内。
这可以防止发送垃圾邮件,因为垃圾邮件发送者可以获得有效的时间戳/验证对的唯一实用方法是解析表单,但这种擦除只有15分钟的生命。
答案 5 :(得分:6)
根据在更高级别设置的其他可能选项,您可能需要将以下内容放在include目录中的.htaccess文件中:
Satisfy all
Order deny,allow
Deny from all
当上层目录定义了包括以下行的基本身份验证时,我遇到了这个:
Satisfy any
这阻止了我的所有拒绝生效,因为用户已经过身份验证。
答案 6 :(得分:0)
您可以将以下命令添加到.htaccess
文件中
Deny from all
ErrorDocument 403 "nothing is here"
在未经授权的情况下,它将显示“这里什么都没有”消息。
如果要通过错误代码重定向到特定页面,则可以定义如下命令:
ErrorDocument 404 "/errors/404.html"
它将重定向到/errors/404.html
并显示未找到自定义页面的屏幕。