Imr*_*l.H 126 php regex apache .htaccess mod-rewrite
这是场景:
index.php根文件夹中有一个文件index.php其中是在includes文件夹中.submit.php)位于根文件夹中,用于表单提交操作.我想includes通过htaccess 限制用户直接访问文件夹中的文件.也是为了submit.php.但是包含将适用于index.php文件.就像,如果用户类型www.domain.com/includes/somepage.php,它将限制它(可能会重定向到错误页面).
jer*_*oen 258
我只是将includes文件夹移出web-root,但是如果要阻止对整个includes文件夹的直接访问,可以将.htaccess文件放在包含以下内容的文件夹中:
deny from all
Run Code Online (Sandbox Code Playgroud)
这样你就无法打开该文件夹中的任何文件,但是你可以将它们包含在php中而不会出现任何问题.
anu*_*ava 53
这是纯粹mod_rewrite的解决方案:
RewriteRule ^(includes/|submit\.php) - [F,L,NC]
Run Code Online (Sandbox Code Playgroud)
如果URI包含/includes/或,则显示禁止使用的错误/submit.php
luk*_*985 25
可以使用Files指令并禁止访问所有文件,然后再次使用它来设置可访问的文件:
<Files ~ "^.*">
Deny from all
</Files>
<Files ~ "^index\.php|css|js|.*\.png|.*\.jpg|.*\.gif">
Allow from all
</Files>
Run Code Online (Sandbox Code Playgroud)
sta*_*een 13
1个基于mod_alias的衬里解决方案:
RedirectMatch 403 ^/folder/file.php$
Run Code Online (Sandbox Code Playgroud)
这将显示/folder/file.php的禁止错误
你的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]
Run Code Online (Sandbox Code Playgroud)
并且(ii)在您的PHP index.php表单生成器中包含一些用于时间戳和验证的隐藏字段.例如,验证可以是时间戳的MD5的前10个字符和一些内部秘密.在处理提交时,您可以(i)验证时间戳和验证匹配,以及(ii)时间戳在当前时间的15分钟内.
这可以防止垃圾邮件,因为垃圾邮件制造者可以获得有效的时间戳/验证对的唯一实用方法是解析表单,但这种刮擦只有15分钟的生命.
根据在更高级别设置的其他可能选项,您可能需要将以下内容放在include目录中的.htaccess文件中:
Satisfy all
Order deny,allow
Deny from all
Run Code Online (Sandbox Code Playgroud)
当上层目录定义了包括以下行的基本身份验证时,我碰到了这个:
Satisfy any
Run Code Online (Sandbox Code Playgroud)
由于用户已通过身份验证,这可以防止我拒绝全部生效.