2011-06-13 102 views
2

如何拒绝直接访问目录中的文件,我不希望用户直接访问它,但允许服务器/本地主机访问,因为我试图避免直接访问该目录访问包含由PHP输出/解析的HTML文件。拒绝直接访问除server/localhost之外的文件

目录的列表如下:

template 
    | 
    | 
    +--------> acp 
    |   | 
    |   +------> acp_index.html 
    |   +------> acp_settings.html 
    | 
    +--------> css 
    |   | 
    |   +------> stylesheet.css 
    | 
    +--------> js 
    |   | 
    |   +------> scripts.js 
    | 
    +---> index.html 
    +---> login.html 
    +---> etc... 

template/acp我需要避免直接访问文件,但本地主机/服务器应该能够访问并解析它。

回答

3

如果我明白了这个权利,您想让人们远离template/acp,同时仍然允许服务器访问这些文件?

你可以做一个.htaccess并将其放置在template/acp,该文件应包含单词deny from all,就这样,每个人都试图获得该文件将不能够,但是服务器仍然能够通过。 PHP或其他服务器端脚本语言...

在PHP中可以使用的功能,如include()require()包括在PHP文件的文件,甚至从包含的文件执行PHP代码,或读的东西,如fread()文件或file_get_contents() ...

但是,如果你没有使用任何服务器端脚本有没有办法可以完全避免直接访问文件,如果你仍然需要用户能够看到他们的内容...

请注意,.htaccess不支持所有类型的网络服务器。 Apachee支持它,而其他像lighttpd不支持。

1

如果您从不需要直接访问这些文件,并且只从PHP进行解析,那么将这些文件移出网络目录。如果这些文件不在Web目录中(并且您没有在Apache中设置别名路径),那么有一天某个人无法访问它们。

PHP不限于网络目录,PHP可以访问服务器中/ tmp,/ etc /目录中的所有文件(实际上这是一个问题)。 Apache用户&组可以读取的每个文件都可以被PHP读取。

PHP的设置将限制这一点,它的open_basedir的,如果此设置被设定,那么你可以在open_basedir的caontined目录的目录树opnly访问文件。所以你可能需要在那里添加你的模板目录。

您可能还需要更改include_dir设置以添加您的模板位置并编写简化的include_once或require_once指令。