É possível obter o regex correspondente de dentro da diretiva apache LocationMatch?

5

Gostaria de saber se o código a seguir deve estar funcionando:

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

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

O que estou tentando conseguir com isso é exigir um grupo baseado na primeira variável regex. Então, se o usuário for para http://localhost/a-repository-name , ele precisa estar no grupo a-repository-name para poder abrir o URL.

Por algum motivo, não consigo fazer esse código funcionar e o apache retorna: Authorization of user **** to access /a-repository-name failed, reason: user is not part of the 'require'ed group(s).
Eu acho que não é compatível com a variável adequada em Require group $1 .
Este é o caminho certo a ser feito ou estou perdendo alguma coisa?

    
por tftd 03.09.2012 / 16:52

2 respostas

2

LocationMatch não suporta backreferencing, você não pode fazer isso em versões anteriores a 2.4.8.

    
por 03.09.2012 / 16:58
6

De acordo com a documentação do Apache , isso agora é suportado ...

From 2.4.8 onwards, named groups and backreferences are captured and written to the environment with the corresponding name prefixed with "MATCH_" and in upper case. This allows elements of URLs to be referenced from within expressions and modules like mod_rewrite. In order to prevent confusion, numbered (unnamed) backreferences are ignored. Use named groups instead.

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