GZIP CSS полностью разрывает страницу

Спасибо, что зашли. Я действительно пробовал это самостоятельно, но опять же, мне кажется, что это слишком сложно.

СИТУАЦИЯ...


I'm live with my own website on a shared hoster. When I came to the point of wanting to compress my tons of cms-generated js and css to make PageSpeedInsights and myself happy, I read into it and at last found out that my hoster doesn't have neither mod_gzip nor mod_deflate installed. What is installed is ZLIB. So I searched. Found the typical php append solution and didn't like it. Found a few neat lines of code for htaccess which made me happy cause they worked right away:

AddHandler application/x-httpd-php .html .htm .php .js
php_flag output_buffering On
php_value output_handler ob_gzhandler
php_flag zlib.output_compression Off

Я подтвердил, что он работает, с помощью GIDZipTest. Все в порядке, и мне это нравится.

Но как только я помещаю .css в список AddHandler, моя страница полностью ломается.
Я пытался использовать решение php с ob_gzhandler только для файлов css, но в итоге он вообще не работал. Просто ничего не делает.


РЕШЕНИЕ? (НЕ СОВСЕМ)


I manually minified all the css and uploaded a css.gz version of each file, serving it with

RewriteCond %{HTTP:Accept-encoding} gzip
RewriteCond %{REQUEST_FILENAME}\.gz -s
RewriteRule ^(.*)\.css $1\.css\.gz [QSA]
RewriteRule \.css\.gz$ - [T=text/css,E=no-gzip:1]

This works fine as well.


ВОПРОСОВ!


  1. Что мне нужно определить / указать, чтобы сжатие css работало? Я чувствую, что мне просто не хватает кое-чего о конверсии ...

  2. Когда я передаю свои уменьшенные вручную файлы .css.gz клиенту, будут ли они по-прежнему сжиматься дополнительно?

  3. Будет ли это иметь какие-либо дополнительные преимущества в размере файла, или мне лучше просто придерживаться версий, обслуживаемых вручную, и сообщать ** о Google PageSpeed?
    (GIDZipTest по-прежнему показывает сценарии «что, если» даже для миниатюрных файлов, а это впечатляющие цифры если честно. хотелось бы этого ...)

Заранее благодарим вас за любой комментарий.
Искренне Ваш

Мариан


person Marian    schedule 08.09.2012    source источник


Ответы (4)


Решение PHP + zlib автоматически сжимает КАЖДЫЙ файл PHP, обслуживаемый с веб-сервера. Это означает, что каждый файл, который вы помещаете в свой обработчик php, будет отправлен в сжатом виде в клиентский браузер. В любом случае, директива AddHandler указывает веб-серверу обрабатывать файлы css как сценарии php, поэтому я полагаю, что они «сломаны». Файлы CSS должны иметь собственный обработчик (text / css).

Другое (не протестированное) решение могло бы сохранить обработчик, который вы определили изначально:

AddHandler application/x-httpd-php .html .htm .php .js .css

и добавив вверху ваших файлов css этот php-код:

<?php header('Content-Type: text/css'); ?>

Но я не уверен, что это сработает. Это должно сообщить браузерам, что они действительно получают файлы css.

Лучшим решением в этих случаях было бы упомянутое вами mod_deflate.

person Lorenzo Marcon    schedule 08.09.2012
comment
Пробовал это. Создал файл gzip-css.php с: <?php header ("content-type: text/css; charset: UTF-8");?>, а затем добавил файл с помощью <filesMatch "\.(css)$"> php_value auto_prepend_file gzip-css.php </filesMatch> в htaccess. Сломался точно так же. Я бы хотел просто выпустить воздух, но mod_deflate не установлен. Или я могу использовать deflate с zlib? Если да, то как? Я уже пробовал AddOutputFilterByType DEFLATE text/css и ничего не вышло. - person Marian; 08.09.2012
comment
Ну, я хотел создать файл с расширением .css с этим исходным кодом php без какой-либо дополнительной директивы htaccess (см. Здесь: webmasterworld.com/apache/3942763.htm), а не файл css с расширением .php, но, возможно, это решение тоже не сработает. Я знаю, что mod_deflate не установлен, поэтому, боюсь, у вас не так много вариантов. - person Lorenzo Marcon; 09.09.2012
comment
Добавление заголовка типа содержимого в файлы css, сжатые с помощью AddHandler, как ни странно, не сработало, хотя использование ob_gzhandler из того же сценария работает. (См. Мое собственное решение) Спасибо за ваши предложения! - person Marian; 10.09.2012

Вы доставляете контент в сжатом виде, а не только для передачи, как это было бы с Content -Кодирование. Таким образом, клиент не распаковывает его перед интерпретацией содержимого.

Вы можете включить MultiViews, чтобы разрешить автоматическое согласование содержимого с помощью mod_negotiation:

<FilesMatch "\.css$">
    Options MultiViews
</FilesMatch>
person Gumbo    schedule 08.09.2012
comment
К сожалению, простое добавление этого в .htaccess тоже не сработало, хотя выглядело довольно многообещающе. ; _; Пробовал в различных комбинациях zlib и ручной подачи. Есть ли приказ, о котором нужно знать? - person Marian; 10.09.2012
comment
@Marian Нет, это должно работать как есть. Может нужно добавить AddEncoding x-gzip .gz .tgz. - person Gumbo; 10.09.2012

Поэтому, если вы столкнетесь с подобными проблемами, я советую прочитать это статью и получите свой полный путь к веб-каталогу правильно!

Создайте скрипт php (например: "gzip-css.php") с

<?php
ob_start("ob_gzhandler");
header("content-type: text/css; charset: UTF-8");
?>

и добавьте его с помощью .htaccess

<FilesMatch "\.css$">
ForceType application/x-httpd-php
php_value auto_prepend_file "/full/path/to/that/file/see/link/above/gzip-css.php"
</FilesMatch>

ко всем файлам .css. До сих пор это казалось мне единственным решением. Я бы получил это право, не спрашивая здесь, если бы я нашел свой полный путь раньше. Возможно, у кого-то все еще есть лучшее представление о том, как объединить версию AddHandler с css tho.

Что не сработало (полностью отключает все css):
- Добавление .css в AddHandler и любое из вышеперечисленных решений (включая мое).
- Обслуживание файлов css, сжатых вручную с помощью gzip, и добавить сценарий типа содержимого
- Комбинация двух

person Marian    schedule 10.09.2012

Старый вопрос, но я нашел решение .htaccess, которое сработало для меня без изменения кода.

AddHandler application/x-httpd-php .html .htm .php .js .css
<Files *.css>
    Header set Content-type "text/css"
</Files>
php_flag zlib.output_compression On
php_value zlib.output_compression_level 5
person Maciej    schedule 14.05.2015