📜  htaccess 新日期时间戳 - PHP (1)

📅  最后修改于: 2023-12-03 15:15:33             🧑  作者: Mango

使用htaccess和PHP添加新日期时间戳

您可能想要为您网站的静态资源添加版本号,以避免缓存问题。这通过为文件名称添加查询参数或路径变量完成,但这会导致浏览器下载无用的静态资源。因此,更好的方法是添加时间戳以使文件名唯一。

在htaccess文件中使用RewriteRule和PHP,您可以很容易地实现这一点。

基本思路
  1. 让.htaccess把类似style.css的请求重写为style.<timestamp>.css。
  2. 通过PHP来输出时间戳。
示例代码
.htaccess文件
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.+)\.css$ $1.%{TIME_YEAR}%{TIME_MON}%{TIME_DAY}%{TIME_HOUR}%{TIME_MIN}%{TIME_SEC}.css [L]
PHP文件
<?php
function getFileTime($fileName) {
    return filemtime($_SERVER['DOCUMENT_ROOT'].$fileName);
}

function getFileTimestamp($fileName) {
    return date("YmdHis", getFileTime($fileName));
}

?>

<link href="style.<?php echo getFileTimestamp('/css/style.css'); ?>.css" rel="stylesheet">
解释

.htaccess规则使用RewriteRule来检查.css请求并将它们重写为类似style.<timestamp>.css。这个timestamp是由一串时间值组成,如年份、月份、日期、小时、分钟和秒钟。这确保了每次请求样式表时,样式表都有不同的URL,因此浏览器不会从缓存获取过期的响应。

PHP函数getFileTimestamp获取给定文件的时间戳。在此示例中,getFileTimestamp函数获取了style.css的修改时间,然后输出一个类似于'20220512110542'的时间戳字符串。该字符串在HTML中用作查询参数,确保每次浏览器查找文件时,它会在URL重复机制中被扫描,并获得唯一的URL。

在HTML中使用getFileTimestamp函数(或getFileTime)来计算所需文件的时间戳,然后在文件路径中添加时间戳,因此每次请求,浏览器都会下载最新版本的文件,而不是从缓存中提取旧版本。

结论

使用htaccess和PHP在您的网站中添加新年时间戳,是一种解决缓存问题的有效方法。它确保了即使网站的缓存被清除,也可以正常地请求资源。此外,每次呈现页面时,浏览器都会从服务器获取更新过的样式表和文件,这对于长期可维护性和开发效率也是很有价值的。