我需要通过密码限制对我的 Web 根 Apache 测试服务器的访问(即http://本地主机)但允许访问子文件夹(即:http://localhost/测试站点)
我确实创建了 .htpasswd 和 .htaccess,并将 .htaccess 放到了 Web 根目录 (http://localhost),因此当尝试访问 Web 根目录时,它会要求输入用户和密码,但子文件夹也会要求输入用户和密码(即尝试访问http://本地主机/testite)
我想在网站根目录下输入密码,但不在子文件夹下输入密码。
那可能吗?
答案1
好像你告诉 Apache 需要你的 web-root 密码,但你有没有告诉 Apache不是所有其他目录都需要它吗?
在您的 .htaccess 中(或在 httpd.conf 中,它们执行相同的工作)您可能会看到类似下面的内容(将 pastebin 链接添加到您的 .htaccess 文件,我可以使其精确):
<Directory "/www/private">
Order allow,deny
Allow from all
Options Indexes
AuthType Basic
AuthName "Private Access"
AuthUserFile "/www/private/.htpasswd"
Require valid-user
</Directory>
但这也适用于该路径下的所有目录。您需要明确告知 Apache 否则。
<Directory "/var/private/subdir">
Satisfy any
</Directory>
您可以使用正则表达式来<DirectoryMatch "regex">
概括这一点,只是不要忘记防范asdf.com/subdir/../
表达式。
更新:还值得一提的是,尽管大部分文档已经有指令,但在底层文件系统上的符号链接的情况下<Directory[Match]>
也有一些指令很有帮助。<Location[Match]>
答案2
在 Apache 2.4 中我们可以使用LocationMatch 指令和一个正则表达式。
# Require a password to access to the root path with or without a forward slash
<LocationMatch "^/?$">
Order Allow,Deny
Options Indexes
AuthType Basic
AuthName "Private Access"
AuthUserFile "/www/private/.htpasswd"
Require valid-user
</LocationMatch>