拒绝访问带有 .htaccess 的子文件夹和文件

拒绝访问带有 .htaccess 的子文件夹和文件

我需要拒绝访问某些子文件夹下的配置文件。目前我有这条规则,但它不起作用:

<Files ~ "((foo|bar))$">
  Order deny,allow
  Deny from all
</Files>

如果我转到www.mysite.com/foo/foo2/file.xml,我可以查看该文件。我需要递归地foo拒绝所有文件访问bar

更新

我已经尝试过此配置,但出现内部错误

<FilesMatch ".foo\.(*)$">
    Order Allow,Deny
    Deny from all
</FilesMatch>

答案1

<Files>[...]将应用于具有与指定文件名匹配的基本名称(文件名的最后一个组成部分)的任何对象”。这不是你想要的。

Directory*不工作.htaccess

你必须使用mod_rewrite.例如:

<IfModule mod_rewrite.c>
  RewriteEngine on
  RewriteRule ^(foo|bar) - [F]
</IfModule>

答案2

尝试使用 location 而不是文件指令:

<Location "path/to/folder-or-file">
    Order Allow,Deny
    Deny from all
</Location>

答案3

我会在 apache 配置中进行正则表达式匹配。然后

  • 使用<DirectoryMatch>代替<File>(您正在目录上进行正则表达式匹配)
  • 纠正你的正则表达式的严格性(特别是$
  • 简化你的正则表达式(括号太多)

    <DirectoryMatch "/path/to/toplevel/(foo|bar)">
        Order deny,allow
        Deny from all
    </DirectoryMatch>
    

请注意,这是 WWW 目录所在/path/to/toplevel/的文件系统位置。foobar


但是,如果您只想通过以下方式执行此操作.htaccess,请.htaccess在中创建一个文件每一个您要拒绝的目录(foo、bar、foo/bar 等),然后输入以下行

Deny from all

里面。

相关内容