我需要做一个有点奇怪的手术。
首先,我在 Debian 上运行 apache2(以用户 www-data 身份运行)
所以,我有一个带有 .txt 或 .ini 的简单文本文件,或任何扩展名,都没关系。
这些文件位于具有如下结构的子文件夹中:
www.example.com/folder1/car/foobar.txt www.example.com/folder1/cycle/foobar.txt www.example.com/folder1/fish/foobar.txt www.example.com/folder1/fruit/foobar.txt
因此,文件名始终相同,“层次结构”也是如此,只需更改文件夹的名称:/folder-name-static/folder-name-dinamyc/file-name-static.txt
我应该做的(我认为)相对简单:我必须能够通过服务器上的程序读取该文件(例如 python、php),但如果我尝试通过浏览器检索文件内容(将 url 数字化为 www.example.com/folder1/car/foobar.txt,或通过 cUrl 等),我必须收到禁止错误或其他错误,但是无法访问文件。
如果通过 FTP 访问这些文件也是“隐藏的”,或者无论如何都无法下载(至少我使用 ftp 根和用户数据时是这样的)那就太好了
我能怎么做?
我在网上找到了这个,放在.htaccess文件中:
<Files File.txt>
Order allow, deny
Deny from all
</ Files>
它似乎有效,但只有当文件位于 Web 根目录 (www.example.com / myfile.txt) 中,而不是子文件夹中时才有效。此外,第二级文件夹 (www.example.com/folder1/水果/foobar.txt) 将被动态创建。我想避免不时更改 .htaccess 文件。
可以创建一个规则,类似这样的规则,适用于具有给定名称的所有文件,该名称位于 *www.example.com/folder-name-static/*文件夹名称-dinamyc/***文件名-static.txt*,其中这些部分都是一样的,只需**那一个更改?
编辑:
正如 Dave Drager 所说,我可以简化这一过程,将这些文件保存在 Web 可访问目录之外。但这些目录也会包含其他文件、图像以及我的用户使用的内容,因此我只是尝试不设置重复的文件夹系统,例如:
/var/www/vhosts/example.com/httpdocs/folder1/car/[other folders and files here]
/var/www/vhosts/example.com/httpdocs/folder1/cycle/[other folders and files here]
/var/www/vhosts/example.com/httpdocs/folder1/fish/[other folders and files here]
//and, then for the 'secrets' files:
/folder1/data/car/foobar.txt
/folder1/data/cycle/foobar.txt
/folder1/data/fish/foobar.txt
答案1
答案2
来自命令文档部分:
关键字只能用逗号分隔;它们之间不允许有空格。
因此,以下说法是错误的:
<Files File.txt>
Order allow, deny
Deny from all
</ Files>
以下(更)正确
<Files "File.txt">
Order allow,deny
Deny from all
</Files>
答案3
是的,这都是可能的。但是,如果您的服务器上有需要访问文本文件的程序,则它们应该位于 Web 根目录之外。例如,如果您的 Web 文件位于 ~/public_html/,则应将它们存储在 ~/data 中。没有理由将它们放在公共 html 文件夹中。
除了从 Web 文件夹中删除它们之外,还要确保正确设置了它们的 unix 权限。脚本的用户需要具有读取(写入?)访问权限,但其他任何人都不必具有此访问权限。
如果您确实需要将这些文件放在可通过 Web 访问的文件夹中,则可以通过 mod_rewrite 执行所需的操作。请参阅以下网站以获取许多示例,其中一个应该符合要求。
http://perishablepress.com/press/2006/01/10/stupid-htaccess-tricks/
答案4
您可以使用Linux ACL。