Apache RewriteRule ignorando RewriteCond?

1

Então eu tenho um Apache rodando no OSX Server 10.4 (não pergunte) com vários sites. Em 0002_[example.com].conf , tenho este código:

<Directory "/Library/WebServer/Documents/secret/">
    RewriteEngine On
    RewriteCond %{REMOTE_ADDR} !^137\.250\.
    RewriteRule .* /messages/secret.html
</Directory>

No entanto, nesta configuração, o RewriteCond sempre parece ser falso, já que o diretório secret é mostrado mesmo que o endereço do cliente não comece com 137.250.

Se eu alterar a configuração para esta

<Directory "/Library/WebServer/Documents/secret/">
    RewriteEngine On
    RewriteRule .* /messages/secret.html
    RewriteCond %{REMOTE_ADDR} !^137\.250\.
</Directory>

a condição não é avaliada nem sempre é avaliada como verdadeira. De qualquer forma, os todos clientes são bloqueados.

O que estou fazendo de errado?

    
por winsmith 26.05.2010 / 14:29

1 resposta

2

However, in this configuration, the RewriteCond always seems to evaluate to false, since the secret directory gets shown even if the client's address does not begin with 137.250.

Claro, porque foi isso que você expressou com seu RewriteCond ! Se você quiser que apenas os clientes cujos endereços IP iniciem com 137.250. para ver a página secret.html , remova a negação ( ! ) no seu RewriteCond .

O segundo snippet que você postou é inerentemente incorreto. RewriteCond precisa preceder o RewriteRule a que se refere.

Seria mais fácil usar Allow , Deny e umErrorDocument personalizado de 403% (consulte Controle de Acesso ). Ao usar o martelo mod_rewrite, qualquer problema começa a parecer um prego ...;)

    
por 26.05.2010 / 16:43