如何拒绝访问.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

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

domain.example/inscription/log.txt

但是我上面的方法不起作用: 我仍然可以从浏览器远程访问该文件。

255786 次浏览

在 htaccess 文件中,<Files>指令的作用域仅适用于该目录(我猜想这是为了避免在子目录 htaccess 中的规则/指令从父目录中取而代之时产生混淆)。

所以你可以拥有:

<Files "log.txt">
Order Allow,Deny
Deny from all
</Files>

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

<Files "log.txt">
Require all denied
</Files>

inscription目录中的 htaccess 文件中。或者你可以使用 mod _ rewrite 来处理这两种拒绝访问 htaccess 文件和 log.txt 的情况:

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


RewriteRule ^/?inscription/log\.txt$ - [F,L]

强模式匹配 ーー这是我在易逝新闻社使用的方法。使用强模式匹配,这种技术可以防止外部访问任何包含“ 。 hta”、“ 。 HTA”或任何不区分大小写的组合的文件。为了说明,此代码将阻止通过以下任何请求进行访问:

  • . htaccess
  • 。 HTACCESS
  • 。 hTaCcessS
  • Htaccess
  • Filename.HTACCESS
  • FILEROOT.hTaCessS

..等等。显然,这种方法在保护站点的 HTAccess 文件方面非常有效。此外,该技术还包括强化“ 满足所有”指令。注意,这段代码应该放在域的根 HTAccess 文件中:

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

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

<Files "reminder.php">
require all denied
require host localhost
require ip 127.0.0.1
require ip xxx.yyy.zzz.aaa
</Files>

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

<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>

我不确定,但是我怀疑这是在 .htaccess文件中定义子目录的尝试,视频 <Files ./inscription/log.txt>导致它失败。将 .htaccess文件放在与 log.txt相同的目录中(即在 inscription目录中)会更简单,它将在那里工作。

在.htaccess 文件中放置以下行,并根据需要替换文件名

RewriteRule ^(test\.php) - [F,L,NC]

你可以用 <Directory>标签 例如:

<Directory /inscription>
<Files log.txt>
Order allow,deny
Deny from all
</Files>
</Directory>

不要使用 ./,因为如果只使用 /,它会查看站点的根目录。

有关更详细的示例,请访问 http://httpd.apache.org/docs/2.2/sections.html