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

时间:2014-11-04 18:36:27

标签: php apache .htaccess mod-rewrite

我在子文件夹中遇到.htaccess和PHP文件的问题。我想要实现的是阻止任何人访问我的子文件夹中的任何文件 - 但我希望我的index.php能够访问这些文件。

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

BUT

[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的请求被拒绝了。有人可以帮忙吗?

3 个答案:

答案 0 :(得分:1)

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

您可以做的最好的事情是查看referer字段。可以很容易地伪造它,但这是你唯一可以做的事情。

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

其中&#34; example.com&#34;是你的网站。

答案 1 :(得分:0)

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

第二行检查访问者是否来自某个网​​址。第3行阻止他们访问somefile.php

答案 2 :(得分:0)

在.htaccess中,您可以将任何请求重定向到index.php以外的目录中的文件,如下所示:

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