限制对 apache2 web 根目录的访问,但允许其访问子文件夹

限制对 apache2 web 根目录的访问,但允许其访问子文件夹

我需要通过密码限制对我的 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>

相关内容