Однажды в студёную зимнюю пору возникла у меня необходимость пускать в определенный раздел сайта только тех пользователей, кто успешно прошёл аутентификацию (правильно указал логин и пароль для доступа). Причём списков пользователей было несколько в разных файлах (принципиально важно было заставить апач работать именно с несколькими файлами, так как один из них поддерживался одним товарищем, а другой --- совсем другим и у файлов были разные права доступа). Сначала я попробовал следующее решение "в лоб":
<Location /database/> AuthType Basic AuthName "Protected area" AuthUserFile /etc/hosting/htpasswd1.conf AuthUserFile /etc/hosting/htpasswd2.conf Require valid-user </Location>
Но, к моему разочарованию, это не сработало – apache обрабатывал только второй файл (указанный в конфиге последним). А юзеров из первого молча игнорировал. Тогда пришлось искать другое решение и оно таки нашлось:
<AuthnProviderAlias file userlist1> AuthUserFile /etc/hosting/htpasswd1.conf </AuthnProviderAlias> <AuthnProviderAlias file userlist2> AuthUserFile /etc/hosting/htpasswd2.conf </AuthnProviderAlias> <VirtualHost 10.10.10.10:80> .... <Location /database/> AuthBasicProvider userlist1 userlist2 AuthType Basic AuthName "Protected area" Require valid-user </Location> </VirtualHost>
Обратите внимание, что директива AuthnProviderAlias находится на самом верхнем уровне вложенности конфига. Т.е. её нельзя использовать внутри секции <VirtualHost> и прочих аналогичных. Такая конфигурация позволит предоставить доступ к URI /database/ для всех пользователей, которые есть ИЛИ в файле /etc/hosting/htpasswd1.conf ИЛИ в файле /etc/hosting/htpasswd2.conf и которые правильно указали свой пароль. На всякий случай напомню, что пользователи и их пароли задаются с помощью утилиты htpasswd, вот так:
$ htpasswd /etc/hosting/htpasswd1.conf avz1 New password: Re-type new password: Adding password for user avz1
Таким образом мы добавили в файл /etc/hosting/htpasswd1.conf нового пользователя с логином avz1 и паролем, который дважды ввели с клавиатуры при выполнении этой команды. Если требуется автоматизировать этот процесс, то весьма полезной может оказаться опция -b.