使用PHP和.htaccess添加修改为filename的时间以强制进行新的缓存

时间:2016-03-01 13:09:29

标签: php .htaccess 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>

我在评论中尝试过这个解决方案,但对我来说一切都很好,有没有人有任何建议?感谢。

2 个答案:

答案 0 :(得分:5)

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

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

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

答案 1 :(得分:1)

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

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