2015-06-17 4 views
0

Я использую предварительно скомпилированные CSS-файлы и JS-файлы, так что сервер не делает этого «на лету».Настройки Apache для отправки gzipped файлов CSS/JS в браузер

Так что в той же папке у меня есть файл.css (версия gzipped), file.nozip.css (версия nogzipped). Затем, в зависимости от того, принимает ли браузер файлы gzipped или нет, отправьте правильную версию.

Так у меня есть следующие в файле .htaccess:

RewriteEngine On 

RewriteRule ^(.*)\.[0-9]+\.css$ $1.css [L] 

#redirect Konqueror and "old browsers" 
RewriteCond %{REQUEST_FILENAME} !\.nogzip\.css$ 
RewriteCond %{HTTP:Accept-encoding} !gzip [OR] 
RewriteCond %{HTTP_USER_AGENT} Konqueror 
RewriteRule ^(.*)\.css$ $1.nogzip.css [L] 

<IfModule mod_headers.c> 
    Header set Vary User-Agent 
#set Content-Encoding for all css files 
    <FilesMatch .*\.css$> 
    Header set Content-Encoding: gzip 
    Header set Cache-control: private 
    </FilesMatch> 
#drop Content-Encoding in case we send not gzipped file 
    <FilesMatch .*\.nogzip\.css$> 
    Header unset Content-Encoding 
    </FilesMatch> 
</IfModule> 

<IfModule mod_expires.c> 
    ExpiresActive On 
    ExpiresDefault A36000000 
</IfModule> 

Этот подход я использовал много раз, прежде чем и как на Windows, а также на серверах Linux. Работал отлично.

Однако в последнее время при разработке другого сайта я сталкиваюсь с проблемой, когда браузер не распознает gzipped-файл как gzipped.

На локальном хосте работает, вот заголовок ответа:

Accept-Ranges:bytes 
Cache-control:private 
Connection:Keep-Alive 
Content-Encoding:gzip 
Content-Length:39115 
Content-Type:text/css 
Date:Wed, 17 Jun 2015 11:27:28 GMT 
ETag:"98cb-517998d9e690c" 
Keep-Alive:timeout=5, max=100 
Last-Modified:Wed, 03 Jun 2015 09:19:16 GMT 
Server:Apache/2.4.12 (Win64) OpenSSL/1.0.1m PHP/5.6.9 
Vary:User-Agent 
X-Distributed-by:AHC 

Вот заголовок, полученный от сервера производства (не работает - файл CSS отображается как промелькнул в браузере):

Accept-Ranges:bytes 
Cache-control:private 
Connection:Keep-Alive 
Content-Encoding:gzip 
Content-Length:39099 
Content-Type:text/css 
Date:Wed, 17 Jun 2015 11:30:08 GMT 
ETag:"98cb-517998d8fcd00-gzip" 
Keep-Alive:timeout=5, max=99 
Last-Modified:Wed, 03 Jun 2015 09:19:16 GMT 
Server:Apache/2.4.10 (Debian) 
Vary:User-Agent 

Единственное отличие - «X-Distributed-by: AHC», но это вряд ли станет причиной проблемы.

Любые идеи, что еще проверить?

+0

У меня такая же проблема. Вы решили это? –

ответ

1

В случае 2, она подразумевает, mod_deflate сжимаются на лету из-за ETAG:

ETag:"98cb-517998d8fcd00-gzip" 

Может быть, это было бы лучше, чтобы установить не-GZIP для, например, дело konqueror?

+0

Значит, он gzips уже загрузил контент? Это было то, о чем я подумал, и я проверил следующее: я сохранил содержимое и распаковал файл и получил версию без молнии, поэтому похоже, что сжатие применяется только один раз, и это нормально. Я смог исправить проблему, добавив «Header set Content-Encoding: gzip», который решил проблему с отправкой gzipped-версии в браузер, однако «Header unset Content-Encoding» не исправляет случай, когда no- gzipped файл, который будет отправлен, можете ли вы уточнить решение, которое вы предлагаете? – Volder