几个优化htaccess的方法 让yslow评级提高。
#以下内容拷贝在.htaccess中
# Expire images header
#使用了两种方法 mod_expires.c mod_headers.c 时间参数可以自已调
expiresactive on
#默认所有文件缓存时间设置为300秒
expiresdefault a300
#html,plain-text缓存300秒
expiresbytype text/html a300
expiresbytype text/plain a300
#css, javascript缓存一个小时
expiresbytype text/css a3600
ExpiresByType text/javascript a3600
expiresbytype application/x-javascript a3600
#图标文件缓存30天
expiresbytype image/x-icon a2592000
ExpiresByType image/ico a2592000
#image类缓存一个星期
ExpiresByType image/jpg a604800
expiresbytype image/jpeg a604800
expiresbytype image/gif a604800
expiresbytype image/png a604800
#其它文件缓存一个星期
expiresbytype application/x-shockwave-flash a604800
expiresbytype video/x-flv a604800
expiresbytype application/pdf a604800
# htm,html,php类的文件缓存5分钟
Header set Cache-Control "max-age=300, must-revalidate"
#xml,txt类文件缓存五个小时
Header set Cache-Control "max-age=18000, public, must-revalidate"
# css, js, swf类的文件缓存一个星期
header set cache-control "max-age=604800″
# jpg,gif,jpeg,png,ico,flv,pdf等文件缓存一年
header set cache-control "max-age=2592000″
# Expire images header end
#remove etag 要去除etag的话把 riletag none 前的注释去除。enable前的加上。
#FileETag none
#etag enable
FileETag MTime Size
#protect htaccess wp-config 保护htaccess 与 wp-config文件
order allow,deny
deny from all
order allow,deny
deny from all
#deny index view 目录禁止列表
Options All -Indexes
#关闭服务器签名
ServerSignature Off
#限制上传大小为10mb
LimitRequestBody 10240000
#enable gzip 在htaccess
RewriteRule (.*.css$|.*.js$) gzip.php?$1 [L]
#htaccess 设置结束————————————————-
作好htaccess的设置, 针对htaccess最后一个设置(css 与js 的gzip压缩),还需要做以下事情。
第一步.需要在wordpress根目录下新建wp-cache文件夹,属性777
第二步. 需要新建gzip.php 文件。新建后放置在wordpress根目录里。拷上以下代码.
<?php
define('ABSPATH', dirname(__FILE__).'/');
$cache = true;//Gzip压缩开关
$cachedir = 'wp-cache/';//存放gz文件的目录,确保可写
$gzip = strstr($_SERVER['HTTP_ACCEPT_ENCODING'], 'gzip');
$deflate = strstr($_SERVER['HTTP_ACCEPT_ENCODING'], 'deflate');
$encoding = $gzip ? 'gzip' : ($deflate ? 'deflate' : 'none');
if(!isset($_SERVER['QUERY_STRING'])) exit();
$key=array_shift(explode('?', $_SERVER['QUERY_STRING']));
$key=str_replace('../','',$key);
$filename=ABSPATH.$key;
$symbol='^';
$rel_path=str_replace(ABSPATH,'',dirname($filename));
$namespace=str_replace('/',$symbol,$rel_path);
$cache_filename=ABSPATH.$cachedir.$namespace.$symbol.basename($filename).'.gz';//生成gz文件路径
$type="Content-type: text/html"; //默认的类型信息
$ext = array_pop(explode('.', $filename));//根据后缀判断文件类型信息
switch ($ext){
case 'css':
$type="Content-type: text/css";
break;
case 'js':
$type="Content-type: text/javascript";
break;
default:
exit();
}
if($cache){
if(file_exists($cache_filename)){//假如存在gz文件
$mtime = filemtime($cache_filename);
$gmt_mtime = gmdate('D, d M Y H:i:s', $mtime) . ' GMT';
if( (isset($_SERVER['HTTP_IF_MODIFIED_SINCE']) &&
array_shift(explode(';', $_SERVER['HTTP_IF_MODIFIED_SINCE'])) == $gmt_mtime)
){
// 浏览器cache中的文件修改日期是否一致,将返回304
header ("HTTP/1.1 304 Not Modified");
header("Expires: ");
header("Cache-Control: ");
header("Pragma: ");
header($type);
header("Tips: Cache Not Modified (Gzip)");
header ('Content-Length: 0');
}else{
//读取gz文件输出
$content = file_get_contents($cache_filename);
header("Last-Modified:" . $gmt_mtime);
header("Expires: ");
header("Cache-Control: ");
header("Pragma: ");
header($type);
header("Tips: Normal Respond (Gzip)");
header("Content-Encoding: gzip");
echo $content;
}
}else if(file_exists($filename)){ //没有对应的gz文件
$mtime = mktime();
$gmt_mtime = gmdate('D, d M Y H:i:s', $mtime) . ' GMT';
$content = file_get_contents($filename);//读取文件
$content = gzencode($content, 9, $gzip ? FORCE_GZIP : FORCE_DEFLATE);//压缩文件内容
header("Last-Modified:" . $gmt_mtime);
header("Expires: ");
header("Cache-Control: ");
header("Pragma: ");
header($type);
header("Tips: Build Gzip File (Gzip)");
header ("Content-Encoding: " . $encoding);
header ('Content-Length: ' . strlen($content));
echo $content;
if ($fp = fopen($cache_filename, 'w')) {//写入gz文件,供下次使用
fwrite($fp, $content);
fclose($fp);
}
}else{
header("HTTP/1.0 404 Not Found");
}
}else{ //处理不使用Gzip模式下的输出。原理基本同上
if(file_exists($filename)){
$mtime = filemtime($filename);
$gmt_mtime = gmdate('D, d M Y H:i:s', $mtime) . ' GMT';
if( (isset($_SERVER['HTTP_IF_MODIFIED_SINCE']) &&
array_shift(explode(';', $_SERVER['HTTP_IF_MODIFIED_SINCE'])) == $gmt_mtime)
){
header ("HTTP/1.1 304 Not Modified");
header("Expires: ");
header("Cache-Control: ");
header("Pragma: ");
header($type);
header("Tips: Cache Not Modified");
header ('Content-Length: 0');
}else{
header("Last-Modified:" . $gmt_mtime);
header("Expires: ");
header("Cache-Control: ");
header("Pragma: ");
header($type);
header("Tips: Normal Respond");
$content = readfile($filename);
echo $content;
}
}else{
header("HTTP/1.0 404 Not Found");
}
}
?>做好以上这些. 相信你的yslow 评分能提升不少。 至于其它的js css合并. 位置等问题。应该都是小问题了。 手动整合调整或插件都行。
注: 修改css.js等文件后,把wp-cache中的gz文件都清空一下.不然在前台不会生效. 另.flv的缓存时间可设为0(针对网站中插入视频的情况.)













目前没有评论。