如何使用 .htaccess 阻止对当前目录中文件的访问

如何使用 .htaccess 阻止对当前目录中文件的访问

我在公共文件夹中有一些私人文件,我想阻止对它们的访问。例如,假设我有以下文件树:

  • 字典
    • 文件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>

相关内容