我正在尝试配置 Apache v2.4.7,以在数据库中查找用户是否可以访问特定位置。我设法对一些特定位置执行此操作,但无法对动态位置执行此操作。
因此,这对于两个位置“mydomain.com/foo”和“mydomain.com/bar”有效
<Location /foo>
AuthName "/foo"
AuthType Digest
Require valid-user
AuthBasicProvider dbd
AuthDBDUserRealmQuery "SELECT password FROM Users WHERE login = '%s' AND realm = '%s'"
</Location>
<Location /bar>
AuthName "/bar"
AuthType Digest
Require valid-user
AuthBasicProvider dbd
AuthDBDUserRealmQuery "SELECT password FROM Users WHERE login = '%s' AND realm = '%s'"
</Location>
如果我的数据库中有领域“/foo”或“/bar”的记录,那么一切都很好。
但是现在,假设我有一千个,并且有些可以随时创建。我尝试了以下解决方案:
<LocationMatch /.*>
AuthName "%{DOCUMENT_URI}"
AuthType Digest
Require valid-user
AuthBasicProvider dbd
AuthDBDUserRealmQuery "SELECT password FROM Users WHERE login = '%s' AND realm = '%s'"
</LocationMatch>
我读 (https://httpd.apache.org/docs/trunk/fr/mod/mod_authn_core.html#authname)AuthName
可以动态设置,但是我在错误日志中不断收到以下消息,这意味着该变量没有被实际请求的位置动态替换。
user `firstname.lastname' in realm `%{DOCUMENT_URI}' not found:
我希望得到一些帮助来找出我做错了什么,或者找到另一种方法。
答案1
您期待的功能即将推出Apache 2.5,在 Apache 2.4 中尚不可用。在 Apache <=2.4 中,您只能使用纯字符串作为 AuthName。