Назад | Перейти на главную страницу

Можно ли получить согласованное регулярное выражение из директивы apache LocationMatch?

Мне интересно, должен ли работать следующий код:

<LocationMatch "/(.*)([/])?(.*)">
    Order allow,deny
    Allow from all

    AuthType Basic
    AuthName "Git"
    AuthUserFile  /git/.htpasswd
    AuthGroupFile /git/.htgroup
    Require group $1
</LocationMatch>

Я пытаюсь добиться этого, чтобы потребовать группу, основанную на первой переменной регулярного выражения. Итак, если пользователь перейдет к http://localhost/a-repository-name он должен быть в группе a-repository-name чтобы иметь возможность открыть URL-адрес.

По какой-то причине я не могу заставить этот код работать, и apache возвращает: Authorization of user **** to access /a-repository-name failed, reason: user is not part of the 'require'ed group(s).
Я думаю, это не соответствует правильной переменной в Require group $1.
Это правильный способ сделать или я что-то упускаю?

Согласно Документация Apache теперь это поддерживается ...

Начиная с версии 2.4.8, именованные группы и обратные ссылки захватываются и записываются в среду с соответствующим именем с префиксом «MATCH_» и в верхнем регистре. Это позволяет ссылаться на элементы URL-адресов из выражений и модулей, таких как mod_rewrite. Во избежание путаницы пронумерованные (безымянные) обратные ссылки игнорируются. Вместо этого используйте именованные группы.

<LocationMatch "^/combined/(?<sitename>[^/]+)">
    require ldap-group cn=%{env:MATCH_SITENAME},ou=combined,o=Example
</LocationMatch>

LocationMatch не поддерживает обратную ссылку, вы не можете сделать это в версиях до 2.4.8.