使用 PHP 和 .htaccess 将修改时间添加到文件名以强制新缓存


Add time modified to filename with PHP and .htaccess to force fresh caching

我按照这个(http://www.electrictoolbox.com/force-reload-css-javascript-unique-filenames/)教程,通过将修改的时间添加到文件名中来动态命名我的css和javascript文件来强制更新缓存。这是在开发过程中使用的,因为我在托管缓存我的文件时遇到问题。我已经确认mod_rewrite已打开并且正在读取htaccess,我肯定在apache服务器上。我的脚本中没有错误,但是当我使用开发人员工具检查源代码时,文件名没有更改。测试页 www.diysoakwells.com.au/cart2.php。

.htaccess:

RewriteEngine On
RewriteCond %{HTTP_HOST} ^diysoakwells.com.au$
RewriteRule (.*) http://www.diysoakwells.com.au/$1 [R=301,L]
RewriteRule ^(css|js)/(.*)'.[0-9]+'.(.*)$ /$1/$2.$3 [L]

<IfModule mod_deflate.c>
SetOutputFilter DEFLATE
# Don’t compress
SetEnvIfNoCase Request_URI '.(?:gif|jpe?g|png)$ no-gzip dont-vary
SetEnvIfNoCase Request_URI '.(?:exe|t?gz|zip|bz2|sit|rar)$ no-gzip dont-vary
#Dealing with proxy servers
<IfModule mod_headers.c>
Header append Vary User-Agent
</IfModule>
</IfModule> 
<FilesMatch ".(flv|gif|jpg|jpeg|png|ico|swf|js|css|pdf)$">
Header set Cache-Control "max-age=2592000"
</FilesMatch>

.PHP

<link rel="stylesheet" type="text/css" href="/css/styles2.1<?php echo filemtime('/css/styles2.1.css'); ?>.css" />

<script language="javascript" src="/js/simpleCart_verify<?php echo filemtime('/js/simpleCart_verify.js'); ?>.js"></script>

我已经在评论中尝试了解决方案,但对我来说一切看起来都很好,有人有什么建议吗?谢谢。

我认为你让它变得不必要地复杂。您可以添加查询变量,而不是修改文件名。这也将强制重新加载,并且不需要重写您的资产文件名:

<link rel="stylesheet" type="text/css" href="/css/styles2.1.css?ts=<?php echo filemtime('/path/to/css/styles2.1.css'); ?>" />
// etc.

只要您发送相同的查询变量,结果也会被缓存。

首先,您需要在文件路径后添加一个?t=,以便将您的时间添加为 URL 上的查询。

其次,filemtime函数中调用的路径看起来像文件系统上的绝对文件路径。使用file_exists()确保/css/styles2.1.css确实存在。