在apache中实现文件名版本的最佳方法

时间:2013-01-01 14:14:33

标签: php html apache proxy browser-cache

我读到最好将我的文件命名为“test.v01.css”而不是“test.css?v = 01”,因为有些代理忽略了CGI-param部分。

问题是:

最简单的方法是什么? (对于所有以“.js”和“.css”结尾的文件)

我正在使用PHP&的Apache。

1 个答案:

答案 0 :(得分:2)

htaccess的:

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-s # Make the file doesn't actually exist
RewriteRule ^(.*)\.[\d]+\.(css|js)$ $1.$2 [L] # Strip out the version number

PHP:

function versioning($file)
{
  if(strpos($file, '/') !== 0 || !file_exists($_SERVER['DOCUMENT_ROOT'] . $file))
    return $file;

  $mtime = filemtime($_SERVER['DOCUMENT_ROOT'] . $file);
  return preg_replace('{\\.([^./]+)$}', ".$mtime.\$1", $file);
}

用法:

<link rel="stylesheet" href="<?=versioning('/stylesheet/base.css')?>" type="text/css" />

结果:

<link rel="stylesheet" href="/stylesheet/base.94857365432.css" type="text/css" />