RewriteRule passa o pedido para index.php

2

Eu tenho estes dois conjuntos de regras no .htaccess:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !=/favicon.ico
RewriteRule ^ index.php [L]

RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http://my\.site\.com\/ [NC]
RewriteRule .*\.(gif|jpg|png)$ - [NC,L,F]

O primeiro conjunto é um índice padrão do Drupal, e o segundo conjunto é minha própria regra, com o objetivo de impedir o hotlink e o acesso direto às imagens.

Pelo que entendi, se alguém digitar my.site.com/some.jpg diretamente no navegador, o primeiro conjunto de regras não o detectará por causa de sua primeira condição (url é um nome de arquivo existente regular), mas o segundo conjunto de regras deve retornar um 403 Código de status proibido para o cliente (porque não há nenhum referenciador e o padrão termina com .jpg).

Aqui está o que acontece: Eu recebo muitas entradas no log db do Drupal error com nomes de arquivos jpg e nenhum referenciador. Então isso significa que essas requisições atingiram index.php, porque o Apache não pode gravar em log db, somente o Drupal pode.

Minha pergunta: é possível e como fazer isso para parar essas requisições acessando index.php e retornar 403 diretamente para o cliente?

Mover o segundo conjunto de regras (com jpg) antes do primeiro conjunto de regras (índice catch-all) não ajudou. Comentar a condição com o referenciador vazio ( RewriteCond %{HTTP_REFERER} !^$ ) ajudou, as entradas no log do banco de dados pararam de aparecer, mas o objetivo é também bloquear as solicitações com o referenciador vazio.

    
por camcam 01.07.2016 / 10:08

0 respostas