拒绝除server / localhost之外的文件的直接访问

时间:2011-06-13 00:41:55

标签: apache .htaccess

如何拒绝直接访问我不希望用户直接访问它但允许服务器/ localhost访问的目录中的文件,因为我试图避免直接访问的目录包含输出/解析的HTML文件通过PHP。

目录列表如下所示:

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

template/acp我需要避免直接访问文件,但localhost /服务器应该能够访问和解析它。

2 个答案:

答案 0 :(得分:3)

如果我理解这一点,你想让人们离开template/acp,同时仍允许服务器访问这些文件吗?

您可以制作.htaccess并将其放在template/acp中,该文件应包含deny from all字样,就像那样,每个试图获取该文件的人都无法但是,服务器仍然可以通过。 php或其他服务器端脚本语言......

在php中,您可以使用include()require()等函数将文件包含在php文件中,甚至可以从包含的文件中执行php代码,或者使用类似{{3}的文件读取文件}或fread() ...

但是,如果您不使用任何服务器端脚本,如果您仍然需要用户能够查看来自他们的内容,则无法完全避免直接访问文件...

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

答案 1 :(得分:1)

如果您从不需要直接访问这些文件,只需从PHP解析,那么将这些文件放在网络目录之外。如果文件不在web目录中(并且你没有在Apache中设置一些别名路径)那么有一天有人就无法访问它们。

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

On PHp设置将限制此项,它是 open_basedir ,如果设置了此设置,则您可以在open_basedir中的目录树的目录树中查看文件。所以你可能需要在那里添加你的模板目录。

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