Como evitar gzip em imagens redimensionadas php?

3

Não devemos gzipar imagens, certo? Como evito gzipar imagens como esta: img/sample.php?id=image_name.jpg também pode ser chamado assim img/sample.php?id=image_name.jpg&size=3 as imagens reais vivem aqui /images/items/

Eu tentei usar 2 tipos de configuração para o gzip no httpd.conf (veja abaixo), mas em ambos os casos as imagens foram gzipadas de qualquer maneira.

As imagens obviamente não estão sendo tratadas como um arquivo .jpg normal, porque, se fosse, elas não teriam sido compactadas com nenhuma das configurações abaixo. No entanto, cabeçalhos ao vivo mostram como uma imagem normal / jpeg

Alguma ideia de como corrigir isso?

1ª tentativa:

<Location />
# Insert filter
SetOutputFilter DEFLATE

# Netscape 4.x has some problems...
<Location />
# Insert filter
SetOutputFilter DEFLATE

# Netscape 4.x has some problems...
BrowserMatch ^Mozilla/4 gzip-only-text/html

# Netscape 4.06-4.08 have some more problems
BrowserMatch ^Mozilla/4\.0[678] no-gzip

# MSIE masquerades as Netscape, but it is fine
# BrowserMatch \bMSIE !no-gzip !gzip-only-text/html

# NOTE: Due to a bug in mod_setenvif up to Apache 2.0.48
# the above regex won't work. You can use the following
# workaround to get the desired effect:
BrowserMatch \bMSI[E] !no-gzip !gzip-only-text/html

# Don't compress images
SetEnvIfNoCase Request_URI \
\.(?:gif|jpe?g|png)$ no-gzip dont-vary

# Make sure proxies don't deliver the wrong content
Header append Vary User-Agent env=!dont-vary
</Location>BrowserMatch ^Mozilla/4 gzip-only-text/html

# Netscape 4.06-4.08 have some more problems
BrowserMatch ^Mozilla/4\.0[678] no-gzip

# MSIE masquerades as Netscape, but it is fine
# BrowserMatch \bMSIE !no-gzip !gzip-only-text/html

# NOTE: Due to a bug in mod_setenvif up to Apache 2.0.48
# the above regex won't work. You can use the following
# workaround to get the desired effect:
BrowserMatch \bMSI[E] !no-gzip !gzip-only-text/html

# Don't compress images
SetEnvIfNoCase Request_URI \
\.(?:gif|jpe?g|png)$ no-gzip dont-vary

# Make sure proxies don't deliver the wrong content
Header append Vary User-Agent env=!dont-vary
</Location>

2ª tentativa:

    <IfModule mod_deflate.c>
AddOutputFilterByType DEFLATE text/plain    
AddOutputFilterByType DEFLATE text/html
AddOutputFilterByType DEFLATE application/xhtml+xml
AddOutputFilterByType DEFLATE application/xml
AddOutputFilterByType DEFLATE text/xml    
AddOutputFilterByType DEFLATE text/css
AddOutputFilterByType DEFLATE text/javascript
AddOutputFilterByType DEFLATE application/javascript
AddOutputFilterByType DEFLATE application/x-javascript
AddOutputFilterByType DEFLATE application/json
</IfModule>
    
por Joel 04.03.2012 / 22:18

3 respostas

4

Esta parte:

# Don't compress images
SetEnvIfNoCase Request_URI \
\.(?:gif|jpe?g|png)$ no-gzip dont-vary

Está procurando por extensões de arquivo de imagem no pedido URI . Suas extensões de arquivo estão na string de consulta .

Infelizmente, o mod_setenvif não tem acesso à string de consulta e, se eu estou lendo a documentação corretamente, nem o LocationMatch .

mod_rewrite , no entanto, tem acesso à string de consulta e pode definir o ambiente variáveis.

RewriteCond %{QUERY_STRING} \.(?:gif|jpe?g|png)$
RewriteRule ^ - [E=no-gzip,dont-vary] 

Se você estiver usando o mod_rewrite mesmo assim, pode ser uma boa idéia usá-lo para reescrever os URLs para que eles não tenham uma string de consulta. O seguinte faz com que as duas linhas acima sejam desnecessárias.

RewriteRule /generated_images/(.*\.(?:gif|jpe?g|png))$ /sample.php?id=$1
    
por 05.03.2012 / 00:18
1

tente incluir isso:

<LocationMatch \.jpg$>
  SetOutputFilter none
</LocationMatch>
    
por 04.03.2012 / 22:24
-1

Estou usando isso no arquivo .htaccess, que é bastante simples:

<FilesMatch "\.(gif|jpg|png|zip|7z|rar|mp3|avi|swf)$">
    SetEnv no-gzip 1
    SetEnv dont-vary 1
</FilesMatch>

E para arquivos de imagem enviados com scripts e uma string de consulta, você adiciona isto:

RewriteEngine on

RewriteCond %{QUERY_STRING} gif|jpg|png [NC]

RewriteRule ^ - [E=no-gzip,dont-vary]

Nota: Eles diferenciam maiúsculas de minúsculas, portanto, se o arquivo tiver o nome IMAGE.JPG, o servidor ainda irá intervir e gzip-los. Adicione extensões maiúsculas, se você precisar delas. Eu não usei o '$' quando você anexou uma variável de tamanho à sua querystring e, portanto, você precisa de uma pesquisa de substring e não de string.

Além disso, seria melhor escolher um nome exclusivo para o script que lida com arquivos de imagem como "image.php" ou usar uma variável exclusiva na string de consulta para interceptar e não se preocupar com cada extensão de imagem.

Por exemplo RewriteCond %{QUERY_STRING} op=download_image [NC]

RewriteRule ^ - [E=no-gzip,dont-vary]

Para o caso de dizer /sample.php?op=download_image&id=image_name.jpg&size=3

Trapping "image.php" seria mais curto, é claro, com a string de solicitação, mas de qualquer forma.

    
por 30.10.2015 / 09:28