如何拒绝访问.htaccess中的文件

tuc*_*son 102 .htaccess

我有以下.htaccess文件:

RewriteEngine On
RewriteBase /

# Protect the htaccess file
<Files .htaccess>
Order Allow,Deny
Deny from all
</Files>

# Protect log.txt
<Files ./inscription/log.txt>
Order Allow,Deny
Deny from all
</Files>

# Disable directory browsing
Options All -Indexes
Run Code Online (Sandbox Code Playgroud)

我试图禁止访问者访问以下文件:

domain.com/inscription/log.txt
Run Code Online (Sandbox Code Playgroud)

但我上面的内容不起作用:我仍然可以远程访问浏览器中的文件.

Jon*_*Lin 176

在htaccess文件中,该<Files>指令的范围仅适用于该目录(我猜想当子目录的htaccess中的规则/指令应用于父目录中的超级指令时,应避免混淆).

所以你可以:

<Files "log.txt">  
  Order Allow,Deny
  Deny from all
</Files>
Run Code Online (Sandbox Code Playgroud)

对于Apache 2.4+,您可以使用:

<Files "log.txt">  
  Require all denied
</Files>
Run Code Online (Sandbox Code Playgroud)

inscription目录中的htaccess文件中.或者您可以使用mod_rewrite来处理两种情况,拒绝访问htaccess文件以及log.txt:

RewriteRule /?\.htaccess$ - [F,L]

RewriteRule ^/?inscription/log\.txt$ - [F,L]
Run Code Online (Sandbox Code Playgroud)

  • "`<Files>`指令的范围仅适用于该目录" - 不,它不适用.它适用于该目录_and_下面的所有子目录.所以`<Files"log.txt">`将捕获`/ log.txt` _and_`/ inscription/log.txt`. (7认同)

小智 15

强模式匹配 - 这是我在Perishable Press使用的方法.使用强图案匹配,这种技术防止了含有"的任何文件外部访问.HTA "," .HTA ",或它们的任何不区分大小写的组合.为了说明,此代码将阻止通过以下任何请求进行访问:

  • 的.htaccess
  • 的.htaccess
  • 的.htaccess
  • testFILE.htaccess
  • filename.HTACCESS
  • FILEROOT.hTaCcEsS

..等等.显然,这种方法可以非常有效地保护您网站的HTAccess文件.此外,该技术还包括强化" 满足所有 "指令.请注意,此代码应放在域的根HTAccess文件中:

# STRONG HTACCESS PROTECTION
<Files ~ "^.*\.([Hh][Tt][Aa])">
order allow,deny
deny from all
satisfy all
</Files>
Run Code Online (Sandbox Code Playgroud)

  • 仅仅禁止用户访问dotfiles会不会更有意义?使用类似`<Files~"^\..*">`的东西. (7认同)
  • 我在禁用 .files 时获得了相同的行为: &lt;filesMatch "^\..*"&gt; order allowed,deny Deny from all &lt;/FilesMatch&gt; (2认同)

Nik*_*Dow 12

我不相信目前接受的答案是正确的.例如,我.htaccess在虚拟服务器的根目录中有以下文件(apache 2.4):

<Files "reminder.php">
require all denied
require host localhost
require ip 127.0.0.1
require ip xxx.yyy.zzz.aaa
</Files>
Run Code Online (Sandbox Code Playgroud)

这可以防止对reminder.php子目录中的外部访问..htaccess我的Apache 2.2服务器上有一个类似的文件具有相同的效果:

<Files "reminder.php">
        Order Deny,Allow
        Deny from all
        Allow from localhost
        Allow from 127.0.0.1
     Allow from xxx.yyy.zzz.aaa
</Files>
Run Code Online (Sandbox Code Playgroud)

我不确定,但我怀疑这是尝试在.htaccess文件中专门定义子目录, <Files ./inscription/log.txt>导致它失败的子目录.这将是简单的把.htaccess文件在同一目录log.txt中,即inscription目录中,它会在那里工作.