2016-03-01 38 views
1

我跟着這(http://www.electrictoolbox.com/force-reload-css-javascript-unique-filenames/)教程強制更新的緩存動態命名我的CSS和JavaScript文件通過添加修改時間到文件名。這是爲了在開發過程中使用,因爲我在託管緩存文件服務器端時遇到了問題。我已經確認mod_rewrite已打開,正在讀取htaccess,我確定在apache服務器上。我在腳本中沒有遇到任何錯誤,但是當我用開發人員工具檢查源時,文件名沒有改變。測試頁面是www.diysoakwells.com.au/cart2.php。添加時間修改爲文件名與PHP和.htaccess強制新鮮緩存

的.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> 

我曾嘗試在評論中解決,但是這一切看起來好像沒什麼問題,沒有任何人有什麼建議?謝謝。

回答

5

我認爲你讓它變得不必要的複雜。您可以添加查詢變量,而不用修改文件名。這將迫使重載以及和不需要你的資產的文件名改寫:

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

而且只要你發送相同的查詢變量,結果將被緩存爲好。

+0

這很有趣,那麼教程中該方法的好處是什麼,還是隻是過時?編輯: – JPB

+0

@JPB我能想到的唯一的事情是瀏覽器真的拒絕用查詢變量重新加載文件/堅持要緩存它。但我從來沒有遇到過,因爲我擔心它是不必要的複雜。這個技巧也很古老,所以與此無關。 – jeroen

+1

哇,這很好,很簡單。謝謝。 – JPB

1

首先,您需要在文件路徑後面添加一個?t=,以便您的時間作爲查詢添加到URL中。

其次,filemtime函數中調用的路徑看起來像文件系統上的絕對文件路徑。使用file_exists()確保/css/styles2.1.css確實存在。

+0

好的會給它一個去,謝謝 – JPB

+0

感謝您的幫助,但我放棄了我的方法,贊成jeroen簡單的解決方案。 – JPB