Я пытаюсь настроить 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:
Я был бы признателен за помощь, чтобы выяснить, что я делаю неправильно, или найти другой способ.
Ожидаемая функция уже появится Apache 2.5, и пока не доступен в Apache 2.4. В Apache <= 2.4 вы можете использовать только обычную строку для AuthName.