我遇到了.htaccess和PHP文件在子文件夹中的问题。 我想要实现的是防止任何人能够访问我的子文件夹中的任何文件 – 但是我想我的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的请求被拒绝。 任何人都可以帮忙吗?
这是人们的错误观念。 只是因为你链接到另一个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”是您的网站。
RewriteEngine On RewriteCond %{HTTP_REFERER} !^http://www.hello.com/index.php RewriteRule .*subfolder/somefile\.php - [NC,F]
第二行检查访问者是否来自某个url。 第三行阻止他们访问somefile.php
在您的.htaccess中,您可以将任何请求重定向到除index.php以外的目录中的文件,如下所示:
<directory "DOCROOT/subfolder"> RewriteCond %{REQUEST_FILENAME} !=/DOCROOT/subfolder/index.php RewriteRule ^/(.+)$ redirect.php [L] </directory>