.htaccess 密码保护某个目录中的文件

.htaccess 密码保护某个目录中的文件

我在服务器上的不同目录中有同名文件(例如:stats.php),我想用密码保护其中一些文件(根目录中的 .htaccess 文件)。我尝试使用文件路径的“FilesMatch”,但没有成功,我尝试添加“目录”路径,如下所示,问题依然存在。

<Directory /var/www/vhosts/folder/httpdocs/directory/>
<FilesMatch "stats.php">
AuthName "Private file"
AuthType Basic
AuthUserFile /var/www/whatever/.htpasswd
require valid-user
</FilesMatch>
</Directory>

答案1

根目录中的单个.htaccess文件无法实现此目的。您必须放置一个新的.htaccess文件到每个需要与其父级不同的设置的目录:

.htaccess文件(或“分布式配置文件”)提供了一种基于每个目录进行配置更改的方法。包含一个或多个配置指令的文件放置在特定的文档目录中,并且这些指令适用于该目录及其所有子目录

<Directory>指示仅允许服务器配置虚拟主机上下文。该.htaccess文件相当于直接放置在目录中。您有两个选择:

  • /var/www/vhosts/folder/httpdocs/directory/.htaccess使用 创建。<FilesMatch "stats.php">如果您无权访问服务器配置,这是唯一的方法。
  • <Directory /var/www/vhosts/folder/httpdocs/directory/>服务器配置虚拟主机。由于它在 Apache 启动时只加载一次,而不是每次请求时都加载,因此性能更好。

答案2

如果你使用的是 Apache 2.4,则可以使用If 指令与请求匹配以确定是否需要授权,如下所示:

<If "%{REQUEST_URI} =~ /stats.php$/">
    AuthName "Private file"
    AuthType Basic
    AuthUserFile /var/www/whatever/.htpasswd
    Require valid-user
    ErrorDocument 401 "Authorization Required"
</If>

相关内容