apache - apache拒绝所有子目录htaccess不覆盖 root htaccess中的文件规则

  显示原文与译文双语对照的内容
130 2

在我尝试拒绝访问网站子目录中的所有文件的情况下。 我已经向这个子目录添加了一个htaccess文件,并向它添加了一个拒绝的所有指令。 但是,我在站点 root 中还有一个,它允许特定的文件类型,这些类型仍然可以在子目录中访问。 我有这个( 请参见下面)的解决办法,但我觉得必须有更好的方法。 下面是我的两个htaccess文件:

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>



子目录。htaccess


# Deny access to everything


deny from all



子目录。htaccess


# Deny access to everything


Order Allow,Deny


deny from all


<Files *.*>


 deny from all


</Files>



这就是我想要的,但我觉得应该有一种方法来使所有语句的拒绝自己工作。 有谁知道?

时间: 原作者:

62 1

你可以像这样用你的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>



不需要在子目录中使用单独的。htaccess 。

在 root 目录中允许访问。htaccess中的所有html文件,而不是在第一个示例中的子目录中拒绝它。 Apache解析所有规则并使用最后匹配规则,与防火墙( 它使用第一个规则匹配命中) 不同。 先读取全局规则,然后读取特定规则。

原作者:
107 4

apache中指令的顺序实际上不明显。

你在文档 "节的合并方式"中对它有完整的描述。

下面是一个摘录:

合并的顺序为:

  • <Directory> ( 除了 正规表达式 ) 和。"。"。同时完成( 如果允许,则重写 <Directory> )
  • <DirectoryMatch> ( 和 <Directory ~> )
  • <Files><FilesMatch> 同时完成
  • <Location><LocationMatch> 同时完成
  • <If>

因此,你的<File> 指令是在之后处理的Directory目录 ones ( 。作为。htaccess实际上是当前目录的目录指令) 。

它在给定的例子中工作,因为这些文件指令实际上嵌套在。

不能在父代中使用 <FileMatch> 指令,从子目录中排除文件,因为fileMatch只处理文件名,而不是文件路径。 但是,你可以能会尝试一个 LocationMatch,但它可以能会以相当复杂的方式结束,以禁止位置黑客。

实际上,我在这里使用的解决方案是父文件夹中的一个 RedirectMatch:


RedirectMatch 403 ^.*.html$



原作者:
...