允许从代码访问文件,但是从浏览器阻止?

时间:2012-07-06 04:36:35

标签: .htaccess hide block

我有.htaccess个文件,我有一个包含配置文件的文件夹,它们包含敏感内容,例如:数据库详细信息等。我想知道的是,如何阻止从浏览器访问,但允许通过我的脚本访问它们?

我知道这可以在PHP文件本身内部实现,但我宁愿尽可能使用.htaccess方法。

这实际上可以做到吗?我之前尝试过,但在拒绝从浏览器访问该文件的过程中,它也拒绝了编码的访问。

我之前已经对此进行了调查,并且我遇到的一些答案建议将扩展名更改为.inc,然后拒绝对其进行访问。但是,我遇到的几个问题是:a)它立即警告任何可以看到该文件名的人,无论出于何种原因,它是一个配置文件。此外,b)如果我的拒绝代码中断,浏览器将不会将其解析为PHP文件,而是解析inc文件,这意味着它将在浏览器中打印代码。

基本上,这可以在.htaccess文件中完成,还是需要在每个配置文件的标题中添加一些内容?

3 个答案:

答案 0 :(得分:2)

将这些文件放在Web服务器的文档根目录之外。

您仍然可以通过服务器端脚本访问它们,但这确保无法从外部世界直接访问它们。

答案 1 :(得分:0)

传统建议是将这些文件“放在Web服务器的文档根目录之外”。这一切都很好,但许多共享主机产品只提供对public_html目录的写访问权。

我使用一个简单的约定:任何私有内容(不是URI可寻址的)都以下划线或名称前缀为下划线的目录为前缀(例如。_private_include) 。然后我在DOCROOT .htaccess文件中包含此重写规则:

# if a forbidden directory or file name (starting with a . or /) 
# then raise 404 Fatal return

RewriteRule (^|/)[_.] -                                            [F]

请记住,您需要使用RewriteEngine On前缀和/或在启用引擎的任何 .htaccess文件的顶部包含此内容。

请注意“。”前缀选择.htaccess等文件。

答案 2 :(得分:-1)

请使用框架,这些问题不需要存在。如果你坚持,写一个.htaccess来将每个请求重定向到根目录中的单个index.php,然后根据目录有更多的逻辑来确定请求是否用于有效文件并包含它们,否则生成404或403如果您需要静态文件的性能,请使用RewriteCond从index.php检查中排除特定目录或文件类型。