php – 禁用mod_deflate和mod_gzip压缩HTML,CSS和JS的最佳方法
我在运行Apache 2的共享主机上有一些站点.我想压缩传递给浏览器的
HTML,CSS和
Javascript.主机已禁用mod_deflate和mod_gzip,因此这些选项已经用完.不过我可以使用PHP 5,所以我可以使用gzip组件.
我目前将以下内容放在我的.htaccess文件中:
但是,这只会压缩HTML并省略CSS和JS. 有没有一种可靠的方法透明地压缩CSS和JS的输出而无需更改每一页?我搜索过谷歌,并提出了一些解决方案,但我还没有找到合适的解决方案.如果有人可以提出他们知道可行的解决方案,那将非常感激地收到. 注意,The Definitive Post on Gzipping your CSS中的方法2看起来是一个很好的解决方案,但我无法使其正常工作.有没有其他人成功使用这种方法?
对于延迟感到抱歉 – 这对我来说是忙碌的一周.
假设: > .htaccess与compress.php在同一个文件中 我通过在.htaccess中设置以下指令开始我的解决方案: RewriteEngine on RewriteRule ^static/.+.(js|ico|gif|jpg|jpeg|png|css|swf)$compress.php [NC] 您的提供程序必须允许您覆盖.htaccess文件中的mod_rewrite选项. <?php $basedir = realpath( dirname($_SERVER['SCRIPT_FILENAME']) ); $file = realpath( $basedir . $_SERVER["REQUEST_URI"] ); if( !file_exists($file) && strpos($file,$basedir) === 0 ) { header("HTTP/1.0 404 Not Found"); print "File does not exist."; exit(); } $components = split('.',basename($file)); $extension = strtolower( array_pop($components) ); switch($extension) { case 'css': $mime = "text/css"; break; default: $mime = "text/plain"; } header( "Content-Type: " . $mime ); readfile($file); 您当然应该在switch语句中添加更多mime类型.我不想让解决方案依赖于pecl fileinfo扩展或任何其他神奇的mime类型检测库 – 这是最简单的方法. 至于保护脚本 – 我对文件系统中的真实路径进行了转换,因此没有黑客’../../../etc/passwd’或其他的shellcript文件路径不能通过. 那就是 $basedir = realpath( dirname($_SERVER['SCRIPT_FILENAME']) ); $file = realpath( $basedir . $_SERVER["REQUEST_URI"] ); 片段.虽然我很确定除了$basedir之外的其他层次结构中的大多数路径都会在Apache到达脚本之前由Apache处理. 另外,我检查结果路径是否在脚本的目录树中.像pilif建议的那样添加缓存控制的标题,你应该有一个解决问题的工作方案. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |