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


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

  1. wp_enqueue_script()
  2. wp_enqueue_style()
  3. wp_register_script()
  4. 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文件中添加如下代码:

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

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

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

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

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