Apache 拒绝子目录htaccess中的所有内容不覆盖根htaccess中的文件规则
我遇到了一种情况,我试图拒绝访问我网站子目录中的所有文件。我已将一个htaccess文件添加到此子目录,并向其添加了一个deny from all指令。然而,我在站点根目录中也有一个htaccess文件,它允许特定的文件类型,并且看起来这些文件类型在子目录中仍然是可访问的,尽管我不再需要它们。我有一个解决办法(见下文),但我觉得一定有更好的办法。以下是我的两个htaccess文件: Root.htaccessApache 拒绝子目录htaccess中的所有内容不覆盖根htaccess中的文件规则,apache,.htaccess,Apache,.htaccess,我遇到了一种情况,我试图拒绝访问我网站子目录中的所有文件。我已将一个htaccess文件添加到此子目录,并向其添加了一个deny from all指令。然而,我在站点根目录中也有一个htaccess文件,它允许特定的文件类型,并且看起来这些文件类型在子目录中仍然是可访问的,尽管我不再需要它们。我有一个解决办法(见下文),但我觉得一定有更好的办法。以下是我的两个htaccess文件: Root.htaccess # Deny access to everything by default Orde
# Deny access to everything by default
Order Deny,Allow
deny from all
# Allow access to html files
<Files *.html>
allow from all
</Files>
# Deny access to everything
deny from all
# Deny access to everything
Order Allow,Deny
deny from all
<Files *.*>
deny from all
</Files>
解决方法:
htaccess子目录
# Deny access to everything by default
Order Deny,Allow
deny from all
# Allow access to html files
<Files *.html>
allow from all
</Files>
# Deny access to everything
deny from all
# Deny access to everything
Order Allow,Deny
deny from all
<Files *.*>
deny from all
</Files>
#拒绝访问所有内容
命令允许,拒绝
全盘否定
全盘否定
这正是我想要的,但我觉得应该有一种方法可以让“拒绝来自所有”语句本身起作用。有人知道怎么做吗?您可以像这样使用Root.htaccess
# Deny access to everything by default
Order Deny,Allow
deny from all
# Allow access to html files
<Files *.html>
allow from all
</Files>
# Deny access to sub directory
<Files subdirectory/*>
deny from all
</Files>
#默认情况下拒绝访问所有内容
命令拒绝,允许
全盘否定
#允许访问html文件
通融
#拒绝访问子目录
全盘否定
子目录中不需要单独的.htaccess
在第一种情况下,您允许访问根目录中.htaccess中的所有html文件,而不拒绝子目录中的任何位置。Apache解析所有规则并使用最后一个匹配规则,这与防火墙不同(防火墙使用第一个规则匹配命中)。首先读取全局规则,然后读取特定规则。apache中指令的顺序并不明显 您在文档中有完整的描述 以下是摘录: 合并的顺序是:
(正则表达式除外)和.htaccess同时完成(如果允许,.htaccess将覆盖
)
(和
)
和
同时完成
和
同时完成
指令是在目录指令之后处理的(作为.htaccess实际上是当前目录的目录指令)
它适用于给定的示例,因为这些文件指令实际上嵌套在.htaccess目录指令中,第二个文件指令应用于父目录指令之后
不能在父目录中使用
指令,子目录中的文件将被排除在外,因为fileMatch只处理文件名,而不处理文件路径。但是你可以尝试一个定位匹配,但它可能会以一个非常复杂的方式结束,以禁止用点进行定位黑客攻击
事实上,我在这里使用的解决方案是父文件夹中的重定向匹配:
RedirectMatch 403 ^.*\.html$
啊,谢谢。我现在明白我错在哪里了。我错误地认为根htaccess中的所有规则都会被计算,然后子目录htaccess中的所有规则都会被计算。我没有意识到事实上两个文件中有一个组件的合并,其结果在一次传递中应用。谢谢你的回答!我看了一下你提供的链接,连同你的答案,我相信我现在理解了这个问题。但是,我不确定您提供的RedirectMatch将如何拒绝访问该特定子文件夹中的所有文件…实际表单将阻止访问所有html文件。我很久以前就写过,但我认为正确的公式更像是:在所有子目录中,但类似于
redirectmatch403^.subdirectory/*\.html$