Apache: Envie arquivos gzip'ed pré-empacotados

8

Eu quero que o Apache envie arquivos estáticos gzip'ed pela rede, mas também que o Apache nem sempre os gzipe repetidas vezes. Então, pensei se não seria possível entregar um arquivo .gz se ele existir. Esta configuração:

Estrutura do arquivo:

static/
|
|--- style.css
|
\--- style.css.gz

E o seguinte em um .htaccess:

Regra

mod_rewrite:

RewriteCond %{REQUEST_FILENAME}.gz -s
RewriteRule ^(.+) $1.gz [L]

E esta configuração:

AddEncoding x-gzip .gz

Na verdade, isso funciona na medida em que o arquivo .gz é enviado em vez do .css, se a solicitação for para /static/style.css . O problema é apenas que o arquivo é entregue como "application / x-gzip" e não como "text / css". Usar a bandeira T do mod_rewrite não altera isso. Nem um explícito

AddType text/css .css

Alguém tem uma idéia, como eu poderia alcançar o comportamento desejado? Ou é desnecessário, por algum motivo, não contei?

EDIT: Existe uma dificuldade adicional: Enviar o arquivo original para clientes sem suporte ao gzip. Alguém tem uma ideia de como isso poderia funcionar?

    
por Boldewyn 26.10.2009 / 21:29

2 respostas

5

Uma solução para enviar a versão correta para navegadores que não aceitam o gzip seria algo como:

RewriteCond %{HTTP:Accept-Encoding} !gzip
...your rules here...

Além disso, há outra maneira de alterar o tipo, a saber:

<FilesMatch .*\.css.gz>
    ForceType text/css
</FilesMatch>

<FilesMatch .*\.js.gz>
    ForceType text/javascript
</FilesMatch>

HTH.

    
por 26.10.2009 / 22:53
3

Ah, parece que encontrei uma solução: o sinalizador "T" não funciona se definido na mesma regra, mas com certeza, se você gastar uma regra própria:

RewriteCond %{REQUEST_FILENAME}.gz -s
RewriteRule ^(.+) $1.gz

RewriteRule \.css\.gz$ - [T=text/css]
RewriteRule \.js\.gz$ - [T=text/javascript]

Ainda assim, gostaria de ouvir as soluções e opiniões dos outros.

    
por 26.10.2009 / 21:53