我的网站上有各种子文件夹,我希望用户不能通过URL访问它们,但同时我的主要PHP文件能够包含它们或将它们用作表单或链接上的操作。
我尝试使用.htaccess和
<Files *>
Order Allow,Deny
Deny from All
</Files>
但它甚至在我自己的脚本中也拒绝了所有访问权限。我发现逻辑,但我不知道如何使它工作。有任何想法吗?
P.S。我主要担心的是,有些文件没有包含在主PHP文件中,但是它们在那里被链接,并且它们的代码最终以header('Location: ../index.php');
返回到项目的主页面。
答案 0 :(得分:7)
我看到许多答案,包括允许,拒绝拒绝,允许
这个顺序很重要并导致问题。你告诉计算机拒绝比允许更重要,因为它列在最后。告诉你......如果你说:
<Files .htaccess>
Order Allow,Deny
Deny From All
Allow From xxx.xxx.xxx.xxx 127.0.0.1
</Files>
你首先说允许任何人允许,然后拒绝所有......但仍然拒绝所有人。
如果您拒绝拒绝,请允许您说拒绝全部,然后允许任何人允许。
<Files .htaccess>
Order Deny,Allow
Deny From All
Allow From xxx.xxx.xxx.xxx 127.0.0.1
</Files>
允许命令更重要,因为它是最终命令,因此允许在Allow From命令之后列出的命令。
xxx.xxx.xxx.xxx =您的IP
答案 1 :(得分:3)
有一种更安全的方法。将您的包含文件存储在Web可访问文件夹下。所以如果您的网络文件在这里......
/var/www/mysite.com /
在此处存储您的包含文件:
的/ var /包括/
然后用完整的路径包含它们......
include '/var/includes/myincludes.inc.php';
在网络上,myincludes.inc.php文件完全无法访问。
答案 2 :(得分:3)
这样做:
<Files *>
Order Deny,Allow
Allow from 192.168.100.123 127.0.0.1
Deny from all
</Files>
IP列表将是您允许的特定主机,例如localhost。
如果您只想阻止某些目录,这也适用于指令,而不仅仅是文件。
答案 3 :(得分:1)
通常,为了保护这些逻辑文件免受公共访问,您可以
if(!is_defined(some_root_const)){die();}
答案 4 :(得分:1)
将您的应用程序代码放在公共html文件夹之外。然后,您可以在脚本顶部添加一个包含路径,以允许您的脚本访问它们,就像它们位于同一文件夹中一样。
答案 5 :(得分:0)
在你.htaccess中你必须指定你想要允许的主机,你也可以在每个目录中执行。例如。
<Directory /dir/to/block>
Order Allow,Deny
Allow from 192.168.0.1 4.4.4.4
Deny from All
</Directory>
<Directory /dir/to/allow>
Order Allow, Deny
Allow from All
</Directory>