尝试在 apache 中的别名目录上配置密码保护

尝试在 apache 中的别名目录上配置密码保护

我在 Windows 服务器上安装了 apache 2.4.57。我创建了一个新文件夹,该文件夹仅需要显示可以下载的文件。在 httpd.conf 文件中,我添加了以下内容:

Alias "/pw_files" "f:\www_shared\pw_files" 
<Directory "f:\www_shared\pw_files">
    Require all granted
    Options Indexes
    IndexOptions FancyIndexing HTMLTable FoldersFirst SuppressDescription SuppressLastModified NameWidth=* IconWidth=20 IconHeight=20
    IndexStyleSheet /css/autoindex.css
</Directory>

我在 f:\www_shared\pw_files 中创建了一个 .htpasswd 文件,内容如下:

AuthType Basic
AuthName "please enter credentials"
AuthUserFile f:\www_shared\pw_files
AuthGroupFile "c:/apache_php/apache/htpasswd_group2.txt"
Require group pw_files

我创建了一个新用户:

htpasswd -c f:\www_shared\pw_files\.htpasswd pw_user

我将 .htpasswd 的输出移到了 c:\apache_php\apache 中的 .htpasswd 文件中

在 c:/apache_php/apache/htpasswd_group2.txt 中我有:

pw_files: admin pw_user

我做了这些更改并重新启动。

但是,当我去:

http://www.example.com/pw_files

它让我可以直接查看文件夹的内容,但我从未收到输入用户名和密码的提示。我不确定我错过了什么。

答案1

一个很大的误解是,Apache 密码保护和 mod-rewrite 规则必须放在.htaccess文件中。这是错误的。https://httpd.apache.org/docs/2.4/howto/htaccess.html#when

您显然有权访问主要的 Apache 配置httpd.conf;然后建议在<Directory "f:\www_shared\pw_files">您已有的部分中设置访问限制。

第二:你的f:\www_shared\pw_files看起来像是一个目录,但实际上AuthUserFile f:\www_shared\pw_files却是错误的AuthUserFile指令需要文件路径。请使用AuthUserFile f:\www_shared\pw_files\.htpasswd

然后:.htaccess文件将被忽略,除非启用AllowOverride指令以及在其中使用的指令类都是允许的。

最后:删除Require all granted基本上消除所有访问限制的指令:

Alias "/pw_files" "f:\www_shared\pw_files" 
<Directory "f:\www_shared\pw_files">
    Options Indexes
    IndexOptions FancyIndexing HTMLTable FoldersFirst SuppressDescription SuppressLastModified NameWidth=* IconWidth=20 IconHeight=20
    IndexStyleSheet /css/autoindex.css
    AuthType Basic
    AuthName "please enter credentials"
    AuthUserFile "f:/www_shared/pw_files/.htpasswd"
    AuthGroupFile "c:/apache_php/apache/htpasswd_group2.txt"
    Require group pw_files
</Directory>

相关内容