Mengapa Apache tidak gzip file css atau js yang memiliki parameter?

8

Beberapa file CSS & JS tidak dikompres oleh apache dengan mod_deflate diaktifkan. File-file ini terlihat seperti ini "[domain.name] /aggregator.css? ..." atau "[domain.name] /misc/jquery.js? ..." di YSlow. CSS & JS lainnya tanpa "?" dikompresi. Mohon jelaskan bagaimana cara saya membuat apache mengompres file ini juga.

Saya menambahkan baris berikut pada file .htaccess

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

Terima kasih

radius
sumber

Jawaban:

5

Hrm, menarik. Saya tidak dapat mereproduksi ini:

[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

(header yang tidak terkait dihapus)

Seperti disebutkan di atas, FilesMatchcocok dengan jalur sistem file , bukan URI. Apakah sumber daya yang tidak dikompres file pada filesystem atau dihasilkan dengan cepat, atau diproksi, atau dialihkan atau sesuatu yang merusak pemetaan URI-ke-filesystem langsung? Anda dapat mencoba menggunakan LocationMatch sebagai gantinya, yang mungkin merupakan taruhan yang lebih baik jika ada bagian dari aplikasi Anda yang bukan file statis.

<IfModule mod_deflate.c>
  <LocationMatch "\.(css|js|x?html?|php)$">
     SetOutputFilter DEFLATE
  </LocationMatch>
</IfModule>
markdrayton
sumber
Terima kasih Mark atas jawabannya. Solusi Anda tampaknya berhasil.
Apakah ada sesuatu yang harus diaktifkan agar LocationMatch berfungsi? Saya mencoba menggunakan solusi ini dan hal itu menyebabkan kesalahan internal tapi FileMatch bekerja ...
Paul Sheldrake
Tidak, mereka berdua adalah bagian dari inti server. Buka pertanyaan lain dengan snippet konfigurasi Anda dan pesan kesalahan dan kami akan memeriksanya.
markdrayton
1
+1 untuk Header set X-Ping "Pong"
Eddie B
apakah respons cache ini atau akan di-gzip di setiap permintaan selanjutnya ke file js / css yang sama?
amit patel
0

$ Pada akhir ekspresi reguler Anda akan cocok dengan akhir URL, jadi jika ada sesuatu setelah ekstensi file, itu tidak akan cocok. Anda bisa menghilangkan $ tetapi itu akan cocok jika ada ".css" dll di mana saja di URL. Sesuatu seperti contoh di bawah ini mungkin lebih aman. Ini harus cocok dengan ".css" di akhir URL, atau ".css" diikuti oleh?, Beberapa parameter, dan kemudian di akhir URL.

   <IfModule mod_deflate.c>
        <FilesMatch "\.(css|js|x?html?|php)($|\?.*$)">
           SetOutputFilter DEFLATE
        </FilesMatch>
   </IfModule>
Ben Williams
sumber
1
Saya pikir itu tidak benar. FilesMatch cocok dengan nama file sistem file, bukan URI. LocationMatch cocok dengan URI (tetapi bahkan yang hanya terlihat pada URI, bukan string kueri).
markdrayton