我有一种情况,我试图拒绝访问我网站的子目录中的所有文件.我在这个子目录中添加了一个htaccess文件,并在所有指令中添加了deny.但是,我在站点根目录中也有一个htaccess文件,它允许特定的文件类型,看起来这些文件类型仍然可以在子目录中访问,即使我不再需要它们.我有一个解决方法(见下文),但我觉得必须有一个更好的方法.这是我的两个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>
Run Code Online (Sandbox Code Playgroud)
子目录.htaccess
# Deny access to everything
deny from all
Run Code Online (Sandbox Code Playgroud)
解决方法:
子目录.htaccess
# Deny access to everything
Order Allow,Deny
deny from all
<Files *.*>
deny from all
</Files>
Run Code Online (Sandbox Code Playgroud)
这就是我想要的,但我觉得应该有一种方法可以让所有陈述的拒绝本身.有谁知道怎么样?
ban*_*nsi 14
你可以像这样拥有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>
Run Code Online (Sandbox Code Playgroud)
子目录中不需要单独的.htaccess.
您允许访问根目录中.htaccess中的所有html文件,而不是在第一种情况下拒绝它在子目录中的任何位置.与防火墙(使用第一个规则匹配命中)不同,Apache解析所有规则并使用最后一个匹配规则.首先读取全局规则,然后再读取特定规则.
apache中的指令顺序实际上并不明显.
您可以在文档"如何合并部分"中对其进行完整描述.
这是一段摘录:
合并的顺序是:
<Directory>
(正则表达式除外)和.htaccess同时完成(使用.htaccess,如果允许,覆盖<Directory>
)<DirectoryMatch>
(和<Directory ~>
)<Files>
并<FilesMatch>
同时完成<Location>
并<LocationMatch>
同时完成<If>
所以会发生什么是你的<File>
指令在目录之后处理(因为.htaccess实际上是当前目录的Directory指令).
它适用于您的给定示例,因为这些文件指令实际上嵌套在.htaccess Directory指令中,第二个File指令应用于父目录之后.
您不能<FileMatch>
在父项中使用指令,其中将排除子目录中的文件,因为fileMatch仅处理文件名,而不处理文件路径.但你可以尝试使用LocationMatch,但它可能会以一个相当复杂的方式结束,以禁止带点的位置黑客.
实际上我在这里使用的解决方案是父文件夹中的RedirectMatch:
RedirectMatch 403 ^.*\.html$
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
36097 次 |
最近记录: |