我在子文件夹中遇到.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的请求被拒绝了。有人可以帮忙吗?
答案 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>