1
想象一下,您的服務器不支持Apache上的deflate和gzip模塊。在這種情況下,有幾種方法可以壓縮數據。假設您的服務器不支持Apache上的deflate和gzip模塊,請使用Apache&PHP gzip強制瀏覽器緩存css和js文件
我使用Apache重寫模塊和php gzip擴展來做到這一點。
我創建了一個名爲gzip.php的文件來獲取$ _SERVER ['REQUEST_URI'],獲取它的內容,設置標題,壓縮和刷新內容作爲文件。
我保留所有文件的擴展名,以便apache保留文件類型。
我添加了這些行的.htaccess:
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} -s
RewriteRule ^((.*)\.(js|css))$ gzip.php [L]
RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]
RewriteRule ^.*$ index.php [NC,L]
我已經添加了這些頭我的文件:
$src = $_SERVER['REQUEST_URI'];
// seconds, minutes, hours, days
$expires = 60*60*24*14;
ob_start();
ob_implicit_flush(0);
header("Pragma: public");
header("Cache-Control: maxage=".$expires);
header('Expires: ' . gmdate('D, d M Y H:i:s', time()+$expires) . ' GMT');
// Then do everything you want to do on the page
$path = PUBLIC_DIR . $src;
$info = pathinfo($path);
$ext = strtolower($info['extension']);
include_once 'Entezar/File.php';
$mimeType = Entezar_File::getMimeType($path);
header("Content-type: $mimeType");
if (file_exists($path) && in_array($ext, array('js', 'css'))) {
$fs = stat($path);
header("Etag: ".sprintf('"%x-%x-%s"', $fs['ino'], $fs['size'],base_convert(str_pad($fs['mtime'],16,"0"),10,16)));
echo file_get_contents($path);
}
unset($path, $src, $info, $ext);
我的問題是,當我使用Apache重寫模塊一起使用PHP來壓縮內容,FireFox根本不會從緩存中加載我的文件(css或js)! 任何人都可以幫助我嗎?!
你在瀏覽器中測試服務器的響應頭?響應標題是否正確?響應主體是否包含與您期望它們相同的內容? – farzad
感謝Farzad,目前問題已解決!我自己回答了!哦,快樂Zend2你! –