我在公共文件夹中有一些私人文件,我想阻止对它们的访问。例如,假设我有以下文件树:
- 字典
- 文件A
- 文件A
- 文件B
- 文件C
我想阻止对当前目录中的 FileB 和 FileA 的访问,并允许对 DictA 目录中的 FileA 的访问。首先想到的是使用 FilesMatch 指令,如下所示:
<FilesMatch "^(?:FileA)|(?:FileB)$">
Deny from all
</FilesMatch>
这里的问题是 DictA 中的 FileA 也将被阻止,这不是我想要的。我可以通过向 DictA 添加另一个 .htaccess 文件来覆盖它,但我想知道是否有一个不涉及这一点的解决方案。
PS:我无法将私人文件移动到单独的文件夹中。
答案1
mod_rewrite 可以做到这一点。
RewriteRule ^File[AB]$ - [R=404]
答案2
您有几种方法:
一种方法是编写一个包含/
作为停止字符的正则表达式。
另一个允许使用 Apache 的任何选项:您为当前目录定义所需的选项,然后为子目录定义相反的选项。
<Directory /var/www/mydir/>
Options -Indexes
</Directory>
<Directory /var/www/mydir/*>
Options +Indexes
</Directory>
因此对于您的示例,只需deny
在当前目录中使用,allow
对于子目录:
<Directory /var/www/mydir/>
<FilesMatch "^(?:FileA)|(?:FileB)$">
Deny from all
</FilesMatch>
</Directory>
<Directory /var/www/mydir/*>
<FilesMatch "^(?:FileA)|(?:FileB)$">
Allow from all
</FilesMatch>
</Directory>