2012-02-12 20 views
14

Me gustaría desactivar la compresión gzip para algunos archivos multimedia que ya están comprimidos en un servidor Apache a través del archivo .htaccess.
Motivo: como está escrito en p. jPlayer's site, la codificación gzip debe estar deshabilitada para los archivos de medios: "Los archivos multimedia ya están comprimidos y el GZIP solo desperdiciará la CPU en su servidor. El complemento Adobe Flash tendrá problemas si usa GZIP en los medios".Cómo desactivar la compresión Apache gzip para algunos archivos multimedia en el archivo .htaccess?

Actualmente estoy teniendo el problema de que Content-Length cabecera no se establece correctamente cuando gzip está activado - por lo que cuando se reproduce algunos archivos MP3 con un reproductor de SoundManager2, barra de progreso de la longitud de la pista no funciona adecuadamente (y quizás por el problema del que hablaron en el sitio de jPlayer).

Puedo probar si se sirve un contenido con gzip here.
Tengo mod_deflate, mod_mime y mod_rewrite módulos habilitados en el servidor.
Según un phpinfo(), aquí es una lista de todos los módulos cargados:

core mod_log_config mod_logio itk http_core mod_so mod_alias mod_auth_basic mod_authn_file mod_authz_default mod_authz_groupfile mod_authz_host mod_authz_user mod_autoindex mod_cgi mod_dav mod_dav_svn mod_authz_svn mod_deflate mod_dir mod_env mod_mime mod_negotiation mod_php5 mod_reqtimeout mod_rewrite mod_setenvif mod_ssl mod_status 

estoy usando Drupal 6, por lo ya tengo un RewriteRule, que es el siguiente:

# Rewrite URLs of the form 'x' to the form 'index.php?q=x'. 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_URI} !=/favicon.ico 
RewriteRule ^(.*)$ index.php?q=$1 [L,QSA] 

ya he intentado desactivar estos gzip, pero no funcionó (hay 6 intentos diferentes - tal vez algunos de ellos tendría que ser establecido a nivel mundial en Apac él es httpd.conf ?!):

  • # http://www.cyberciti.biz/tips/speed-up-apache-20-web-access-or-downloads-with-mod_deflate.html 
    SetOutputFilter DEFLATE 
    SetEnvIfNoCase Request_URI \.(?:gif|jpe?g|png)$ no-gzip dont-vary 
    SetEnvIfNoCase Request_URI \.(?:exe|t?gz|zip|bz2|sit|rar)$ no-gzip dont-vary 
    SetEnvIfNoCase Request_URI \.pdf$ no-gzip dont-vary 
    SetEnvIfNoCase Request_URI \.avi$ no-gzip dont-vary 
    SetEnvIfNoCase Request_URI \.mov$ no-gzip dont-vary 
    SetEnvIfNoCase Request_URI \.mp3$ no-gzip dont-vary 
    SetEnvIfNoCase Request_URI \.mp4$ no-gzip dont-vary 
    SetEnvIfNoCase Request_URI \.rm$ no-gzip dont-vary  
    
  • ## Step 2. here: http://www.mydigitallife.info/how-to-enable-mod_deflate-gzip-compression-on-cpanel-web-hosts/ 
    <IfModule mod_deflate.c> 
    SetOutputFilter DEFLATE 
    
    RemoveOutputFilter mp3 
    # Don’t compress already-compressed files 
    SetEnvIfNoCase Request_URI .(?:gif|jpe?g|png)$ no-gzip dont-vary 
    SetEnvIfNoCase Request_URI .(?:exe|t?gz|zip|bz2|sit|rar)$ no-gzip dont-vary 
    SetEnvIfNoCase Request_URI .(?:avi|mov|mp3|mp4|rm|flv|swf|mp?g)$ no-gzip dont-vary 
    SetEnvIfNoCase Request_URI .pdf$ no-gzip dont-vary 
    </IfModule> 
    
  • RemoveOutputFilter mp3 
    
  • # for files that end with ".mp3" 
    <FilesMatch \.mp3$> 
    SetEnv no-gzip 1 
    </FilesMatch> 
    
  • RewriteRule \.mp3$ - [NS,E=no-gzip:1,E=dont-vary:1] 
    
  • RewriteRule ^((.*)\.mp3)$ $1.mp3 [NS,E=no-gzip:1,E=dont-vary:1] 
    

La única que funciona correctamente, y desactiva la compresión gzip, pero es mundial:

  • RewriteRule ^(.*)$ $1 [NS,E=no-gzip:1,E=dont-vary:1] 
    

cabeceras de respuesta para un archivo MP3 SIN utilizar este RewriteRule: http://pastebin.com/AkUZ6m5Y
Cabeceras de respuesta para un archivo mp3 cuando se usa esta RewriteRule: http://pastebin.com/b8j3NF6D

+1

Si los archivos de medios están en una carpeta diferente, usted podría poner el .htaccess con la línea de trabajo en esa carpeta, y no afectan a otras partes de la página web. – Gerben

+0

+1, es una solución posible, pero no es del todo seguro que mis archivos multimedia entren en un directorio determinado, por lo que me gustaría hacerlo más "flexible". :) – Sk8erPeter

+0

@SkBerPeter - ¿Tiene algunas reglas mod_rewrite que usan el indicador [L]? Hacer que la reescritura funcione en un archivo .htaccess (a diferencia de un archivo .conf donde ocurriría mucho más temprano) es un kludge gigante, que entre otras cosas cambia ligeramente la acción de la [L]. En lugar de salir, el [L] vuelve a la parte superior del .htaccess y, como efecto secundario, se borran todas las variables de entorno. Quizás es por eso que configuraste "no-gzip", pero cuando se hace referencia a él, parece que ya no está establecido. Si está disponible (2.3.9 y posterior) quizás el indicador [END] funcione mejor. –

Respuesta

0

Creo que no está utilizando la compresión en su medio. ¿Verificaste que de hecho estás desinflando archivos? El módulo se puede cargar en la memoria, pero eso no significa que esté comprimiendo archivos. Si su .htaccess solo tiene reglas de reescritura, es probable que no esté comprimiendo ningún tipo de contenido.

+0

* "Si su .htaccess solo tiene reglas de reescritura, lo más probable es que no esté comprimiendo ningún tipo de contenido." * Pegué el RewriteRule aquí que Drupal está usando y está configurado de manera predeterminada, pero ¿por qué eso significa que si la compresión gzip está habilitada en el servidor, con el uso de RewriteRule, no estoy comprimiendo ningún contenido? La conexión no es clara para mí entre las dos cosas. Usar mod_rewrite no significa que la compresión se está deshabilitando. Pero lo que más importa es: probé la compresión antes de hacer preguntas. Como mencioné, puedo probarlo, por ejemplo aquí: http://goo.gl/WCzQZ, dice que sí. – Sk8erPeter

+0

+1 mira los encabezados que ha proporcionado a través de pastebin. – TerryE

1

¿No va por el camino equivocado usando la directiva SetOutputFilter DEFLATE y luego tratando de desactivar esto para la transmisión que ya incluye algún tipo de compresión? ¿No es mucho más fácil no usar esta directiva y luego comprimir la corriente que es compresible. P.ej.

<IfModule mod_deflate.c> 
    AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css application/x-javascript application/javascript application/ecmascript application/rss+xml 
</IfModule> 

Y posiblemente añadiendo una cabecera Vary:

<IfModule mod_headers.c> 
    <FilesMatch "\.(js|css|xml|html)$"> 
     Header append Vary Accept-Encoding 
    </FilesMatch> 
</IfModule> 

bien esto puede faltar el tipo raro que usted no ha pensado, pero va a alcanzar más del 99% de su potencial de compresión.

+0

¡Gracias por tu respuesta! Lo intenté, y es interesante que cuando agregue la parte de FilesMatch que pegó aquí en mi archivo global '.htaccess', me sale un" 500 Internal Server Error "... PERO, lo que es peor, el encabezado Content-Length es todavía no está configurado al reproducir archivos mp3 o visitar otras páginas, lo que es malo cuando se publican archivos multimedia debido a los reproductores. Si uso la línea global 'RewriteRule^(. *) $ $ 1 [NS, E = no-gzip: 1, E = dont-vary: 1]', se establece el encabezado Content-Length y todos los jugadores funcionan correctamente. Pero deshabilitar gzip globalmente no es una buena idea. :( – Sk8erPeter

+0

Mire mi pregunta editada, pegué los encabezados de respuesta de un archivo mp3 cuando se reproduce con y sin el mencionado RewriteRule de trabajo (mire los enlaces pastebin). ¡Gracias! – Sk8erPeter

+0

Estos encabezados de respuesta son exactamente lo que esperaría con y sin desinflar trabajando en la transmisión. No hizo ningún comentario sobre si había comentado la línea 'SetOutputFilter DEFLATE' que tendría que hacer para que funcione. – TerryE

4

tuve para desactivar la compresión de archivos de PAO para el uso de plug-in externo acaban de agregar la siguiente regla en el archivo .htaccess

SetOutputFilter DEFLATE 
SetEnvIfNoCase Request_URI \.odp$ no-gzip dont-vary 

y la compresión discapacitados servidor para archivos PAO Asegúrese de limpiar el navegador caché antes de probar

0

para desactivar la compresión gzip en sólo archivos de Adobe Flash Player (SWF) en mi servidor Apache, he añadido esto a mi archivo .htaccess:

<IfModule mod_headers.c> 
    <FilesMatch "\.swf$"> 
     RewriteRule ^(.*)$ $1 [NS,E=no-gzip:1,E=dont-vary:1] 
    </FilesMatch> 
</IfModule> 

Si quisiera, podría desactivar la compresión gzip para otros tipos de archivos también:

<IfModule mod_headers.c> 
    <FilesMatch "\.(js|css|swf)$"> 
     RewriteRule ^(.*)$ $1 [NS,E=no-gzip:1,E=dont-vary:1] 
    </FilesMatch> 
</IfModule> 
-1

Sé que este hilo es viejo, pero he seguido el mismo camino.

Dos cosas que he hecho.

  1. He habilitado .htaccess y deshabilitado gzip para una carpeta completamente.

    <Files "*.gz.asc"> 
        RemoveEncoding .gz 
    </Files> 
    
  2. poner una regla reqwrite desactivar

    RewriteRule "\.js\.gz$" "-" [T=text/javascript,E=no-gzip:1] 
    

Ambos trabajado para mí sugeriría ir a la documentación de Apache primero antes de buscar en los foros.

para obtener más información, visite el sitio web de Apache.

https://httpd.apache.org/docs/2.4/mod/mod_deflate.html https://httpd.apache.org/docs/2.4/mod/mod_mime.html#addtype

Cuestiones relacionadas