Назад | Перейти на главную страницу

Базовая аутентификация в нескольких каталогах на одном виртуальном хосте

Можно ли вложить базовую аутентификацию? Таким образом, родительская папка и все подпапки могут быть доступны с помощью одной базовой директивы auth, но подпапки имеют отдельный auth

Конфигурация 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, я получаю базовую аутентификацию root, а не базовую аутентификацию, специфичную для этого места

Это было вызвано отсутствием кавычек вокруг папок в Location. Для меня это решило добавление двойных кавычек вокруг них.

Из документация на <Location> директива, первая Location Директива также соответствует всем остальным путям. Поскольку вы используете Apache 2.4, вы должны иметь возможность использовать отрицательные совпадения с LocationMatch. Что-то вместе

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

должно сработать.