.htaccess - 拒绝访问文件夹,但允许通过index.php访问文件

问题描述:

我遇到了.htaccess和PHP文件在子文件夹中的问题。我试图实现的目的是防止任何人能够访问我的子文件夹中的任何文件 - 但我希望我的index.php能够访问这些文件。.htaccess - 拒绝访问文件夹,但允许通过index.php访问文件

DOCROOT/subfolder -> www.somewebsite.com/subfolder/somefile.php 
-> Access Denied 

[index.php] 
<form action="/subfolder/somefile.php"> 
... 
</form> 
-> Success! 

我很想只要使用的.htaccess来解决这个问题。我试过deny from all以及一些RewriteRule,但这些规则也会终止来自index.php的任何请求。 我试图

Order deny,allow 
Deny from all 
Allow from 127.0.0.1 
Allow from somewebsite.com 
Satisfy Any 

但是从index.php文件的请求被拒绝。任何人都可以帮忙吗?

RewriteEngine On 
RewriteCond %{HTTP_REFERER} !^http://www.hello.com/index.php 
RewriteRule .*subfolder/somefile\.php - [NC,F] 

第二行检查访问者是否不是来自某个url。第三行阻止他们访问somefile.php

+0

不工作。从URL中阻止并通过index.php访问。 – Urmir 2014-11-04 19:03:22

这是人们的误解。仅仅因为你是链接到来自另一个PHP文件的PHP文件并不意味着index.php文件正在访问它们。最终用户/浏览器是仍然访问它们,它只是告诉你的index.php文件去哪里。与它的访问方式完全没有关系。在这两种情况下,它们都被浏览器访问。

你可以做的最好的事情就是看看引用领域。可以很容易地伪造它,但这是你唯一能做的事情。

RewriteEngine On 
RewriteCond %{HTTP_REFERER} !^https?://(example.com|127\.0\.0\.1) [NC] 
RewriteRule ^subfolder/ - [L,F] 

其中“example.com”是您的网站。

+0

旁注Q:使用'RewriteCond%{HTTP_REFERER}'比'$ _SERVER ['HTTP_REFERER']更可靠,不能被操纵?按照http://stackoverflow.com/a/6023980/ – 2014-11-04 18:48:14

+0

@ Fred-ii- PHP的$ _SERVER ['HTTP_REFERER']'由apache填充,来自存储'%{ HTTP_REFERER}'重写变量。它们都来自HTTP请求头的'Referer:'字段。他们都是一样的。 – 2014-11-04 18:53:05

+0

看来这不起作用。只需输入somewebsite.com/subfolder/somefile.php即可轻松访问我的子文件夹中的文件。 – Urmir 2014-11-04 18:58:51

在你的.htaccess你可以重定向到文件的任何请求比的index.php如下其它该目录内:

<directory "DOCROOT/subfolder"> 
    RewriteCond %{REQUEST_FILENAME} !=/DOCROOT/subfolder/index.php 
    RewriteRule ^/(.+)$ redirect.php [L] 
</directory> 
+0

''在htaccess文件中不允许容器,因为htaccess文件已经是每个目录的上下文。 – 2014-11-04 19:07:17

+0

获取内部服务器错误500.并不确定我是否正确理解您的答案 - 您的代码阻止访问除index.php之外的任何文件,在相同的子消息文件中,对吗? – Urmir 2014-11-04 19:08:24

+0

对不起,我的错。您可以将上述内容放入您的虚拟主机配置中,或者您可以取出目录标记并将内容放入DOCROOT /子文件夹内的.htaccess文件中 – 2014-11-04 19:12:21