我正在尝试设置一个与 root 权限不同的别名,例如
www.restricted.com - 一位用户
www.restricted.com/alias - 另一位用户
这可能吗?
我在 httpd.conf 中一个单独的目录(不是子目录)中设置了别名,该别名有自己的<directory>
条目和单独的身份验证设置。但是,我得到了二尝试访问 /alias 时,这两个部分都需要输入密码。我不确定这是因为我的失误还是设计失误。
例子:
<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>
。
答案1
使用Directory
指令将权限应用于物理目录结构;这是为了防止无意的特权授予。
让它按照您希望的方式工作的方法是使用指令Location
;这将仅在您使用指令指定的 http 虚拟路径上应用权限设置。
答案2
我更喜欢使用<Location>
指令来限制对不同位置的访问。
您可以使用需要用户 ID指令仅允许特定用户访问。请参阅该链接中提供的示例。这是另一个示例,取自我自己的配置。
实际上,“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>