wordpress在代理(squid)中更新css/js文件缓存的方法


在wordpress添加css或者js文件,我们一般使用这四个函数来实现:

 wp_enqueue_script()
 wp_enqueue_style()
 wp_register_script() 
 wp_register_style() 

函数介绍:

  • 点击查看wp_enqueue_script()介绍
  • 点击查看wp_enqueue_style()介绍
  • 点击查看wp_register_script()介绍
  • 点击查看wp_register_style()介绍

函数中你可以定义css/js的版本号,以便我们在对css/js文件更新时能够清楚浏览器的缓存,默认的版本号是wordpress的版本号。版本号会链接在css/js完整路径的后面,一般在版本号变更后,css/js载入的样式的完整URL也会变更,浏览器发现URL变更会重新请求css/js文件,这样就能达到载入最新的css/js文件。

但是很多代理软件(比如squid)并不支持”?“号形式的cache,我们在使用反向代理来cache我们的网站时,特别在squid3.0以后,已经开始不对带”?”号的url进行缓存了。所以我们如果要使用squid的缓存功能就必须去掉”?”,更新squid代理商的缓存只能通过修改文件名来实现。

以下我们将介绍在wordpress通过对版本号的控制来修改js/css文件名从而能够在代理软件中达到缓存的目的:
1、在我们的主题代码functions.php文件中添加如下代码:

/** 
 * Description: wordpress在代理(squid)中更新css/js文件缓存的方法
 * Author:wordpress教程网
 * Author URI: http://www.shouce.ren/
 */
function ds_filename_based_cache_busting( $src ) {
	// 管理员的后台css/js文件无需处理
	if ( is_admin() )
		return $src;
	//将版本号添加到文件名中已”.“号来区分
	return preg_replace(
		'/\.(js|css)\?ver=(.+)$/',
		'.$2.$1',
		$src
	);
}
add_filter( 'script_loader_src', 'ds_filename_based_cache_busting' );
add_filter( 'style_loader_src', 'ds_filename_based_cache_busting' );

如果你使用的是apache服务器,在你的根目录的.htaccess文件下添加:

<IfModule mod_rewrite.c>
      RewriteEngine On
      RewriteBase /
 
      RewriteCond %{REQUEST_FILENAME} !-f
      RewriteCond %{REQUEST_FILENAME} !-d
      RewriteRule ^(.+)\.(.+)\.(js|css)$ $1.$3 [L]
</IfModule>
 

如果你是nginx服务器配置如下:

location ~ ^(.+)\.(.+)\.(js|css)$ {
    alias $1.$3;
}