我在服务器上的不同目录中有同名文件(例如: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>