filtrar acesso administrativo por IP com httpd.conf

1

Estou tentando filtrar todo o URL de back-end para um IP no arquivo httpd.conf usando este trecho de código:

<Location /admin>
    Order deny,allow
    Deny from all
    Allow from 100.x.xxx.xxx
</Location>

Este funciona bem. Mas não consigo encontrar uma maneira de fazer o mesmo com /? Q = admin.

<Location /?q=admin>
    Order deny,allow
    Deny from all
    Allow from 100.x.xxx.xxx
</Location>

Eu preciso de alguma expressão regular com barra invertida para escapar de alguns dos personagens?

    
por Tritof 19.09.2013 / 17:05

1 resposta

4

O problema que você está tendo é que as diretivas <Location> (e <LocationMatch> ) não operam em strings de consulta (o que vem depois do ? ) - Veja Essa pergunta SO & Os documentos do Apache .

Você pode realizar a mesma coisa usando mod_rewrite e alguma criatividade - Há até mesmo um exemplo de controle de acesso com base na string de consulta nos documentos.

Algo ao longo das linhas do que está abaixo deve estar próximo do que você precisa.

# Applying for all query strings (admin|user)
RewriteCond %{QUERY_STRING} ^q=.*
RewriteCond %{REMOTE_ADDR} !0\.1\.2\.3
# Something is missing here (result: domain.com/page?q=admin) but it works because the link dies anyway on an error page
RewriteRule ^(.*) /page [QSA,L,R=301]
    
por 19.09.2013 / 21:34

Tags