Perché Apache non gzip file css o js che hanno parametri?


8

Alcuni file CSS e JS non sono compressi da apache con mod_deflate abilitato. Questo file è simile a questo [[domain.name] /aggregator.css? ... "o" [domain.name] /misc/jquery.js? ... "in YSlow. Gli altri CSS e JS senza il "?" viene compresso. Spiegami gentilmente come posso fare per comprimere apache anche questi file.

Ho aggiunto la seguente riga al file .htaccess

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

Grazie

Risposte:


5

Hrm, interessante. Non riesco a riprodurre questo:

[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

(intestazioni non correlate rimosse)

Come accennato in precedenza, FilesMatchcorrisponde ai percorsi del filesystem , non agli URI. Le risorse che non sono file compressi sul filesystem o sono generate al volo, o sottoposte a proxy o reindirizzate o qualcos'altro che interrompe la mappatura diretta da URI a filesystem? Puoi invece provare a utilizzare LocationMatch , che è probabilmente una scommessa migliore comunque se qualsiasi parte della tua app non è un file statico.

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

Grazie Marco per la risposta. La tua soluzione sembra funzionare.

È necessario abilitare qualcosa per far funzionare LocationMatch? Ho provato a utilizzare questa soluzione e causa un errore interno ma FileMatch funziona ...
Paul Sheldrake,

No, fanno entrambi parte del core del server. Apri un'altra domanda con lo snippet di configurazione e il messaggio di errore e daremo un'occhiata.
markdrayton,

1
+1 per Header set X-Ping "Pong"
Eddie B

fa questa risposta cache o gzip in ogni successiva richiesta allo stesso file js / css?
Patel,

0

$ Alla fine dell'espressione regolare corrisponderà alla fine dell'URL, quindi se c'è qualcosa dopo l'estensione del file, non corrisponderà. Potresti omettere $ ma poi corrisponderebbe se ci fosse un ".css" ecc. Ovunque nell'URL. Qualcosa come nell'esempio seguente potrebbe essere più sicuro. Dovrebbe corrispondere a ".css" alla fine dell'URL o ".css" seguito da?, Alcuni parametri e quindi alla fine dell'URL.

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

1
Non penso sia corretto. FilesMatch corrisponde a un nome file del file system, non a un URI. LocationMatch corrisponde agli URI (ma anche questo guarda solo l'URI, non la stringa di query).
markdrayton,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.