我需要做一个有点奇怪的操作。
首先,我运行在Debian上,apache2(以用户www数据运行)
所以,我有简单的文本文件与.txt ot .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 。文本
因此,文件名总是相同的,同样的“层次”,只是改变文件夹的名称:/folder-name-static/folder-name-dinamyc/file-name-static.txt
我应该做的是(我认为)相对简单:我必须能够通过服务器上的程序(例如python,php)读取该文件,但是如果我尝试通过broswer检索文件内容(digging the url www。 example.com/folder1/car/foobar.txt,或通过cUrl等)。我必须得到一个禁止的错误,或其他,但不能访问该文件 。
即使通过FTP访问这些文件也是很好的,但是无论如何也不能下载(至less我使用的是ftp root和用户数据)
我能怎么做?
我发现这个在线,被放在文件中.htaccess:
<Files File.txt> Order allow, deny Deny from all </ Files>
它似乎工作,但只有当文件是在Web根目录(www.example.com / myfile.txt),而不是在子文件夹。 此外,第二级文件夹(www.example.com/folder1/ fruit / foobar.txt)将dinamycally创build..我想避免不得不改变.htaccess文件不时。
可以创build一个类似的规则,这个规则适用于所有名称为*的文件,它位于* www.example.com / folder-name-static / * folder-name-dinamyc / ***文件名-static.txt *, 那些部分是相同的 ,只是**一个改变 ?
编辑 :
正如Dave Drager所说,我可以将这些文件保存在networking可访问的目录之外。 但是,这些目录将包含其他文件,图片和我的用户使用的东西,所以我只是尝试没有重复的文件夹系统,如:
/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
你可以使用Files / FilesMatch和一个正则expression式:
<Files ~ "\.txt$"> Order allow,deny Deny from all </Files>
这是如何保护.htpasswd。
或将.txt的任何访问redirect到404:
RedirectMatch 404 \.txt$
是的,这都是可能的。 但是,如果您的服务器上需要访问文本文件的程序,它们应该驻留在Web根目录之外。 例如,如果你的web文件在〜/ public_html /中,你应该把它们存储在〜/ data中。 没有理由把它们放在公共html文件夹中。
除了从networking文件夹中删除它们,请确保它们上的unix权限设置正确。 脚本的用户需要读取(写入)访问权限,但其他任何人都不必拥有此权限。
如果你需要将这些文件放在一个可以通过networking访问的文件夹中,你可以通过mod_rewrite来做些什么。 请看下面的网站,其中一个例子应该符合这个法案。
http://perishablepress.com/press/2006/01/10/stupid-htaccess-tricks/
为什么不使用标准的UNIX文件权限来拒绝对文件的访问?
关于Unix文件权限 ,维基百科有一个体面的解释
将.htaccess文件放在子目录中,并在语句中设置AllowOverride All
您可以使用Linux ACL 。
读完所有的后,我发现.htaccess文件可以为我的方式:只影响文件夹中的文件。
但我的文件夹是dynamic生成的。 我不认为复制.htaccess文件或每次创build新文件夹时重新创build都是可靠的方法。
正如Dave所说的,逻辑的方式应该是将configuration文本文件存储在Web可访问的文件夹之外。
但在每个文件夹中,我必须存储其他文件,图像的例子,必须是networking访问…我仍然不认为复制的文件夹结构,进出networking根本direvtory,也是一个可靠的方式。 因此,我将需要改变甚至Apache的configuration,以包括php文件夹允许的path..这不应该是一个问题,无论如何。
所以,如果我没有更好的 ,我不得不select较差的一个。
我现在会使用多个.htaccess文件解决scheme,希望以后不会有遗憾。
其他解决scheme是赞赏。