Я пытаюсь настроить псевдоним с разрешениями, отличными от root, например
www.restricted.com - один пользователь
www.restricted.com/alias - другой пользователь
Это возможно?
Я установил псевдоним в httpd.conf в отдельном каталоге (а не в подкаталоге) с собственным <directory>
запись и отдельная настройка авторизации. Однако я получаю два запросы пароля при попытке доступа / псевдонима для обоих разделов. Я не уверен, из-за моей ли ошибки или намеренно.
Пример:
<VirtualHost *:443>
ServerName www.restricted.com
DocumentRoot /var/www/site/main/
<Directory /var/www/site/main/>
AuthUserFile /var/www/site/.htpasswd
AuthGroupFile /dev/null
AuthName "main site"
AuthType Basic
Require user joe
</Directory>
Alias /alias /var/www/site/subsite/
<Directory /var/www/site/subsite/>
AuthUserFile /var/www/site/.htpasswd
AuthGroupFile /dev/null
AuthName "subsite"
AuthType Basic
Require user admin
</Directory>
</VirtualHost>
Поскольку корень виртуального хоста и псевдоним находятся в разных каталогах на сервере, я думаю, что <Directory>
директивы более подходят для использования, чем <Location>
.
Я предпочитаю использовать <Location>
директивы для ограничения доступа к разным локациям.
Вы можете использовать Требовать идентификатор пользователя директива, разрешающая доступ только определенным пользователям. См. Пример по этой ссылке. Вот еще один пример, взятый из моей собственной конфигурации.
На самом деле AuthUserFile может использоваться в обоих местоположениях, поскольку AuthUserFile обрабатывает только Аутентификация, а не авторизация.
# This will allow access to / for 'user1'
<Location />
AuthName "Access allowed for user1"
AuthType Basic
AuthUserFile /etc/httpd/htpasswd.user1
Require user user1
</Location>
# This will allow access to /alias for 'user2'
Alias /alias/ /web/alias/
<Location /alias/>
AuthName "Access only allowed for user2"
AuthUserFile /etc/httpd/htpasswd.user2
Require user user2
</Location>
С помощью Directory
директивы применяют разрешения к физической структуре каталогов; это предназначено для предотвращения непреднамеренного предоставления привилегий.
Способ заставить это работать так, как вы хотите, - использовать Location
вместо этого директива; это применит настройки разрешений только к виртуальному пути http, который вы укажете в директиве.