同一虚拟主机上多个目录中的基本身份验证

同一虚拟主机上多个目录中的基本身份验证

是否可以嵌套基本身份验证?这样,父文件夹和所有子文件夹都可以使用一个基本身份验证指令进行访问,但子文件夹需要单独的身份验证

VHost 配置:

<VirtualHost *:80>
        ServerName subdomain.domain.com
        #
        #       Comment
        #
        ErrorLog "/var/log/httpd/analytics_prox_error_log"
        CustomLog "/var/log/httpd/analytics_prox_access_log" common
        SSLProxyEngine on
        SSLProxyVerify none
        ProxyRequests Off

        <Location />
                AuthType Basic
                AuthName "ProxyMain"
                AuthUserFile /var/www/analytics-auth/.htpasswd
                Require user datateam
                Satisfy any
                Deny from all
                Allow from 192.168.0.0/16 10.0.0.0/8
        </Location>

        <Location /folder1/>
                AuthType Basic
                AuthName "Proxy"
                AuthUserFile /var/www/analytics-auth/.htpasswd
                Require user mainuser folder1user
                Satisfy any
                Deny from all
                Allow from 192.168.0.0/16 10.0.0.0/8
        </Location>

        <Location /anotherfolder/>
                AuthType Basic
                AuthName "Proxy"
                AuthUserFile /var/www/analytics-auth/.htpasswd
                Require user mainuser anotherfolderuser
                Satisfy any
                Deny from all
                Allow from 192.168.0.0/16 10.0.0.0/8
        </Location>

        ProxyPass / https://1.1.1.1/
        ProxyPassReverse / https://1.1.1.1/
</VirtualHost>

提示输入 / 的基本身份验证对于所有子文件夹都是相同的,并且可以正常工作。(AuthMain)但是,如果我浏览到指定的文件夹(例如 folder1),我会获得根基本身份验证,而不是特定于该位置的基本身份验证

答案1

来自文档<Location>指令上,第一个Location指令也匹配所有其他路径。由于您使用的是 Apache 2.4,因此您应该能够使用 进行否定匹配LocationMatch

<LocationMatch "^/(?!anotherfolder|folder1)">

应该管用。

答案2

这是由于 Location 中文件夹周围缺少引号造成的。为我添加双引号解决了这个问题。

相关内容