Конфигурируем Apache

Тесты под Konqueror показали, что этот браузер не понимает архивированных файлов (CSS и JavaScript), поэтому чтобы уберечь десятую долю процента посетителей от сердечного приступа (когда они увидят сайт без соответствующих стилей), стоит добавить его в этот набор правил. Аналогично и «старым» браузерам (которые явно указывают, что не понимают архивов) отдается неархивированное содержание.

<IfModule mod_rewrite.c>
        RewriteEngine On
# перенаправляем Konquerorи «старые браузеры»
        RewriteCond %{HTTP:Accept-encoding} !gzip [OR]
        RewriteCond %{HTTP_USER_AGENT} Konqueror
        RewriteRule ^(.*)\.(css|js)$ $1.nogzip.$2 [QSA,L]
</IfModule>

Вся вышеуказанная конструкция «обернута» условием наличия на сервере подключенного mod_rewrite. Если он отсутствует, то это сразу станет видно на заявленных браузерах (перестанут отображаться стили и отрабатывать скрипты). Иначе Apache просто не сможет запуститься, т. к. RewriteEngine не будет объявлен.

Дополнительно к заявленной логике необходимо выставить ряд заголовков для отдаваемых файлов. В частности, Vary и Cache-control касаются локальных проксирующих серверов, которые не должны кэшировать эти файлы, а пропускать их дальше к пользователю, не обрезая при этом заголовок User-Agent (иначе наш сервер никак не узнает, можно ли отдавать архивированную копию файла или нет).

<IfModule mod_headers.c>
        Header append Vary User-Agent
# выставляем для всех css/js файлов Content-Encoding
        <FilesMatch .*\.(js|css)$>
               Header set Content-Encoding: gzip
               Header set Cache-control: private
        </FilesMatch>
# сбрасываем Content-Encoding в том случае, если отдаем не архив
        <FilesMatch .*\.nogzip\.(js|css)$>
               Header unset Content-Encoding
        </FilesMatch>
</IfModule>

В итоге для всех файлов, которые мы отдаем как архивы, дополнительно объявляется Content-Encoding, а для их неархивированных копий этот заголовок сбрасывается. Чем и достигается полная работоспособность данного решения.