Apache 2: Arquivos negativosMatch / FilesNotMatch

7

Se eu quiser aplicar uma regra a apenas alguns arquivos no apache2.conf, posso usar o < FilesMatch >.

Por exemplo:

<FilesMatch ".(gif|jpg|jpeg|png|mpg|avi)$">
    deny from env=hotlink
</FilesMatch>

Mas existe um oposto ao FilesMatch, ou seja, um FilesNotMatch?

O que eu quero alcançar é:

<FilesMatch ".(gif|jpg|jpeg|png|mpg|avi)$">
    <FilesNotMatch "ban">
        deny from env=hotlink
    </FilesNotMatch>
</FilesMatch>

(negar hotlinking de todas as imagens em um servidor, mas banners)

Ou você tem uma sugestão de como eu poderia modificar meu regexp para não corresponder a qualquer coisa que contenha "ban"?

    
por BlaM 27.10.2009 / 11:22

2 respostas

7

Infelizmente, não parece haver uma maneira de negar uma correspondência de arquivo no Apache.

No entanto, a biblioteca de expressões regulares que o Apache usa é PCRE (Perl Compatible Regular Expressions). Isso significa que você tem todo o poder dos regexes de Perl, incluindo suas declarações negativas e declarações antecipadas . Esses são recursos bastante complicados e poderosos. Não posso ter certeza de que isso funcionará, especialmente sem conhecer o layout completo de suas imagens, mas você pode usar algo como:

<FilesMatch "(?<!ban).*\.(gif|jpg|jpeg|png|mpg|avi)$">
    
por 27.10.2009 / 12:18
0

Quase correto - você precisa usar \b(?!.*ban.*)(.+)\.(gif|jpg|jpeg|png|mpg|avi)$ regexp para tal exceção.

    
por 20.07.2011 / 02:17