Como faço para redefinir a diretiva RewriteCond do Apache?

4

Eu tenho algumas configurações do Apache assim:

# Image hotlinking rule
RewriteCond %{HTTP_REFERER} ^http://badsite\.com/
RewriteRule .*/static/artwork/.*\.(jpg|png)$ /static/images/hotlink.png [L]

# Redirects
RewriteRule ^static/artwork/(.+)$    http://cdn.mysite.com/artwork/$1    [L,R=301]

# CodeIgniter
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /index.php/$1 [L]

Ele deve fazer o seguinte:

  1. Se uma solicitação de imagem for proveniente de badsite.com , bloqueie-a e exiba a imagem do hotlink.
  2. Se um pedido regular de uma imagem chegar, redirecione para a imagem hospedada no subdomínio do cdn.
  3. Caso contrário, se a solicitação não for um arquivo ou diretório, carregue uma página da página da Web (passa pelo CodeIgniter).

No entanto, acho que o primeiro RewriteCond está se aplicando à regra de redirecionamento, não à regra de hotlinking, porque as solicitações de imagens desse referenciador são redirecionadas para o CDN, não para a imagem hotlink. Um exemplo nos documentos do Apache (parte inferior da seção) indica que uma quebra de linha pára RewriteCond aplicando, mas isso não está acontecendo.

Existe uma maneira de "redefinir" a regra RewriteCond , ou há algum outro erro na minha configuração?

    
por DisgruntledGoat 29.01.2012 / 19:30

1 resposta

4

As quebras de linha são completamente inconsequentes; um RewriteCond só se aplica a um RewriteRule ; o diretamente abaixo dele.

Fornecer mais informações sobre sua configuração seria útil, pois o contexto é relevante no Apache. Mas, pelo fato de seu segundo RewriteRule funcionar, parece que essa configuração está definida em um contexto <Directory> ou .htaccess e que /static está na raiz desse contexto.

Dado que, você primeiro RewriteRule nunca corresponderá. Mude seu padrão ..

.*/static/artwork/.*\.(jpg|png)$

.. a ..

^static/artwork/.*\.(jpg|png)$
    
por 29.01.2012 / 20:54