.htaccess只允许从包含访问文件

时间:2012-03-22 15:16:46

标签: php apache .htaccess

我的网站上有各种子文件夹,我希望用户不能通过URL访问它们,但同时我的主要PHP文件能够包含它们或将它们用作表单或链接上的操作。

我尝试使用.htaccess和

<Files *>
    Order Allow,Deny
    Deny from All
</Files>

但它甚至在我自己的脚本中也拒绝了所有访问权限。我发现逻辑,但我不知道如何使它工作。有任何想法吗?

P.S。我主要担心的是,有些文件没有包含在主PHP文件中,但是它们在那里被链接,并且它们的代码最终以header('Location: ../index.php');返回到项目的主页面。

6 个答案:

答案 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)

通常,为了保护这些逻辑文件免受公共访问,您可以

  1. 将其放在受保护的目录中,位于htdocs
  2. 之上
  3. 添加对公共常量的检查.. if(!is_defined(some_root_const)){die();}
  4. 将扩展名更改为.inc或其他内容..并根据
  5. 使用.htaccess拒绝

答案 4 :(得分:1)

将您的应用程序代码放在公共html文件夹之外。然后,您可以在脚本顶部添加一个包含路径,以允许您的脚本访问它们,就像它们位于同一文件夹中一样。

http://php.net/manual/en/function.set-include-path.php

答案 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>