¿Por qué Apache no comprime archivos css o js que tienen parámetros?


8

Apache no comprime algunos archivos CSS y JS con mod_deflate habilitado. Este archivo tiene este aspecto "[nombre.dominio] /aggregator.css? ..." o "[nombre.dominio] /misc/jquery.js? ..." en YSlow. El otro CSS y JS sin el "?" se comprime Amablemente explíqueme cómo hago que apache comprima estos archivos también.

Agregué la siguiente línea en el archivo .htaccess

  <IfModule mod_deflate.c>
        <FilesMatch "\.(css|js|x?html?|php)$">
           SetOutputFilter DEFLATE
        </FilesMatch>
  </IfModule>

Gracias

Respuestas:


5

Hrm, interesante. No puedo reproducir esto:

[root@dev ~]# cat /etc/httpd/conf.d/test.conf
<FilesMatch "\.txt$">
  SetOutputFilter DEFLATE
  Header set X-Ping "Pong"
</FilesMatch>

[root@dev ~]# GET -SedH 'Accept-Encoding: gzip, deflate' 'http://localhost/test.txt'
GET http://localhost/test.txt --> 200 OK
Content-Encoding: gzip
Content-Length: 2449
X-Ping: Pong

[root@dev ~]# GET -SedH 'Accept-Encoding: gzip, deflate' 'http://localhost/test.txt?foo'
GET http://localhost/test.txt?foo --> 200 OK
Content-Encoding: gzip
Content-Length: 2449
X-Ping: Pong

(encabezados no relacionados eliminados)

Como se mencionó anteriormente, FilesMatchcoincide con las rutas del sistema de archivos , no con los URI. ¿Son los recursos que no se están comprimiendo archivos en el sistema de archivos o se generan sobre la marcha, o se representan o se redirigen o algo más que interrumpe la asignación directa de URI a sistema de archivos? En su lugar, podría intentar usar LocationMatch , que probablemente sea una mejor apuesta de todos modos si alguna parte de su aplicación no son archivos estáticos.

<IfModule mod_deflate.c>
  <LocationMatch "\.(css|js|x?html?|php)$">
     SetOutputFilter DEFLATE
  </LocationMatch>
</IfModule>

Gracias Mark por la respuesta. Su solución parece estar funcionando.

¿Es necesario habilitar algo para que LocationMatch funcione? Traté de usar esta solución y causa un error interno, pero FileMatch funciona ...
Paul Sheldrake

No, ambos son parte del núcleo del servidor. Abra otra pregunta con su fragmento de configuración y el mensaje de error y lo analizaremos.
markdrayton

1
+1 para el conjunto de encabezado X-Ping "Pong"
Eddie B

¿esta caché responde o gzip en cada solicitud posterior al mismo archivo js / css?
amit patel

0

El $ al final de su expresión regular coincidirá con el final de la URL, por lo que si hay algo después de la extensión del archivo, no coincidirá. Puede omitir $ pero luego coincidiría si hubiera un ".css", etc. en cualquier lugar de la URL. Algo como el ejemplo a continuación podría ser más seguro. Esto debe coincidir con ".css" al final de la URL o ".css" seguido de?, Algunos parámetros y luego el final de la URL.

   <IfModule mod_deflate.c>
        <FilesMatch "\.(css|js|x?html?|php)($|\?.*$)">
           SetOutputFilter DEFLATE
        </FilesMatch>
   </IfModule>

1
No creo que sea correcto. FilesMatch coincide con un nombre de archivo del sistema de archivos, no con un URI. LocationMatch coincide con los URI (pero incluso eso solo mira el URI, no la cadena de consulta).
markdrayton
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.