gzip.php
<?php
if(isset($_SERVER['HTTP_ACCEPT_ENCODING']) && substr_count($_SERVER['HTTP_ACCEPT_ENCODING'], 'gzip'))
{ob_start('ob_gzhandler');
/*header("Content-type: text/css; charset: UTF-8");
header("Cache-Control: must-revalidate");
$offset = 60 * 60 ;
$ExpStr = "Expires: " .
gmdate("D, d M Y H:i:s",
time() + $offset) . " GMT";
header($ExpStr);
*/
}else
ob_start();
?>
Готовый .htaccess для сжатия и кеширования "налету":
################ Expires Control ################
ExpiresActive On
ExpiresDefault A0
<FilesMatch \"\.(gif|jpg|jpeg|png|swf)$\">
# 2 weeks
ExpiresDefault A1209600
Header append Cache-Control \"public\"
</FilesMatch>
<FilesMatch \"\.(xml|txt|html)$\">
# 2 hours
ExpiresDefault A7200
Header append Cache-Control \"proxy-revalidate\"
</FilesMatch>
<FilesMatch \"\.(js|css)$\">
# 3 days
ExpiresDefault A259200
Header append Cache-Control \"proxy-revalidate\"
</FilesMatch>
################## GZip Files ###################
<FilesMatch \"\.js$\">
AddHandler application/x-httpd-php .js
php_value default_mimetype \"text/javascript\"
</FilesMatch>
<FilesMatch \"\.css$\">
AddHandler application/x-httpd-php .css
php_value default_mimetype \"text/css\"
</FilesMatch>
<FilesMatch \"\.(htm|html|shtml)$\">
AddHandler application/x-httpd-php .html
php_value default_mimetype \"text/html\"
</FilesMatch>
php_value auto_prepend_file /absolute/path/to/gzip.php
gzip-css.php
<?php
ob_start ("ob_gzhandler");
header ("content-type: text/css; charset: UTF-8");
header ("cache-control: must-revalidate");
$offset = 60 * 60;
$expire = "expires: " . gmdate ("D, d M Y H:i:s", time() + $offset) . " GMT";
header ($expire);
?>
Для сжатия CSS и JS файлов добавьте в .htaccess следующий код:
AddHandler application/x-httpd-php .css
php_value auto_prepend_file gzip-css.php
php_flag zlib.output_compression On
gzip-css.php, который удаляет из css файла комментарии, пробелы:
<?php
header('Content-type: text/css');
ob_start("compress");
function compress($buffer) {
/* remove comments */
$buffer = preg_replace('!/\*[^*]*\*+([^/][^*]*\*+)*/!', '', $buffer);
/* remove tabs, spaces, newlines, etc. */
$buffer = str_replace(array("\r\n", "\r", "\n", "\t", ' ', ' ', ' '), '', $buffer);
return $buffer;
}
/* все ваши css файлы */
include('master.css');
include('grid.css');
include('print.css');
include('top.css');
ob_end_flush();
?>