gzip対応ブラウザにはgzipファイルを返却する

久々にどはまりした。

はまったとこ。
1、.gzファイルがあるかどうかは、

RewriteCond %{REQUEST_FILENAME}\.gz -s

じゃなくて

RewriteCond %{DOCUMENT_ROOT}/%{REQUEST_FILENAME}\.gz -s

って書く。

2、contentTypeとかcontentEncodingとか。
 正しくなくて表示できなかったり、
 ダウンロードファイル扱いされたり、
 文字化けっちゃったり。


結果、

#Accept-Encodingがgzipのリクエスト
RewriteCond %{HTTP:Accept-Encoding} gzip
#リクエストファイル名.gzのファイルが存在し、かつサイズが0より大きい
RewriteCond %{DOCUMENT_ROOT}/%{REQUEST_FILENAME}\.gz -s
#*.cssまたは*.jsなら圧縮先ファイルを返却する
RewriteRule ^(.+)(\.css|\.js)$ $1$2.gz [L,QSA]

<FilesMatch "\.css\.gz$">
        ForceType text/css;charset=UTF-8
        AddEncoding x-gzip .gz
</FilesMatch>
<FilesMatch "\.js\.gz$">
        ForceType text/javascript;charset=UTF-8
        AddEncoding x-gzip .gz
</FilesMatch>

こんな感じでうまくいったー。

あらかじめgzipファイルを作らなくても、
apacheでは、mod_deflateモジュールで、
リクエスト時に圧縮ファイルを返却することができるらしいけど、
サーバ側の負荷は少しでも減らしたいので、
こんな感じでやることにするかもー。