なぜApacheはパラメーターを持つcssまたはjsファイルをgzipしないのですか?


8

一部のCSSおよびJSファイルは、mod_deflateが有効になっているとApacheによって圧縮されません。このファイルは、YSlowでは「[domain.name] /aggregator.css?...」または「[domain.name] /misc/jquery.js?...」のようになります。「?」のない他のCSSとJS 圧縮されます。このファイルもapacheで圧縮する方法を教えてください。

.htaccessファイルに次の行を追加しました

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

ありがとう

回答:


5

うーん、面白い。これは再現できません。

[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

(無関係なヘッダーは削除されました)

上記のように、URIではなくファイルシステムのパスにFilesMatch一致します。ファイルシステム上の圧縮ファイルではないリソース、またはオンザフライで生成されたリソース、プロキシされたリソース、リダイレクトされたリソース、または直接のURIからファイルシステムへのマッピングを壊すその他のリソースですか?代わりにLocationMatchを使用してみることもできます。これは、アプリの一部が静的ファイルでない場合は、とにかくおそらく良い方法です。

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

Markの回答に感謝します。あなたの解決策は機能しているようです。

LocationMatchを機能させるには、何かを有効にする必要がありますか?このソリューションを使用しようとすると、内部エラーが発生しますが、FileMatchは機能します...
Paul Sheldrake

いいえ、どちらもサーバーコアの一部です。設定スニペットとエラーメッセージで別の質問を開いてください。
markdrayton 2009

1
ヘッダーセットX-Ping "Pong"の+1
Eddie B

このキャッシュ応答ですか、それとも同じjs / cssファイルへの後続の各リクエストでgzipしますか?
amit patel 2016年

0

正規表現の最後の$はURLの最後と一致するため、ファイル拡張子の後に何かがある場合は一致しません。$は省略できますが、URLのどこかに「.css」などが含まれている場合は一致します。以下の例のようなものがより安全かもしれません。これは、URLの末尾の「.css」、または「.css」の後に?、一部のパラメータ、URLの末尾のいずれかと一致する必要があります。

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

1
私はそれが正しいとは思いません。FilesMatchは、URIではなく、ファイルシステムのファイル名と一致します。LocationMatchはURIに一致します(ただし、クエリ文字列ではなくURIのみを参照します)。
markdrayton 2009
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.