2013-09-26 21 views
0

我試圖追加一個查詢字符串到所有.js文件的末尾,而不實際進行代碼更改。這樣做的目的將是當靜態文件被更改時從服務器而不是緩存中取出,所以我們沒有任何過時的靜態文件。Mod重寫將查詢字符串添加到所有靜態文件以緩存清除

所以,當我的HTML說

<script type="text/javascript" src="file1.js"> 

我希望它實際上是從服務器獲取

<script type="text/javascript" src="file1.js?v=1"> 

。這可能嗎?

到目前爲止,我有:

RewriteEngine on 
RewriteCond %{QUERY_STRING} ^$ 
RewriteRule ^(.*)\.js$ /$1.js?v=1 [L,R] 

但我不認爲這是相當做什麼,我希望它...

+2

(您的第一條規則將在這段時間中傳遞)如果資源緩存到期日期,瀏覽器將永遠不會提出請求。爲什麼不恰當地設置緩存規則呢? –

+0

@Pekka웃:提問者可能不知道緩存規則是如何實際應用的 - 您可能想在答案中解釋這一點。 –

+0

@ Qantas是的,在尋找鏈接 –

回答

0

這沒有任何意義:如果資源與緩存到期日期,瀏覽器永遠不會首先提出請求。

更直接的方法是爲JS文件設置正確的緩存規則,如下所示:How to prevent http file caching in Apache httpd (MAMP),根據自己的喜好調整filesMatch指令。

0

這會使文件請求數量增加一倍(在這種情況下,所有的.js文件),但它應該以其他方式工作。

我正在使用一個目錄(有效修改文件名),而不是查詢字符串,因爲這是首選技術。 [1] [2]

首先,重定向到一個不同的文件夾名稱

ReWriteRule ^(.*\.js)$ /rev/000/$1 [L,R] 

與版本號替換000部分(你應該能夠自動執行此)

l標誌停止處理重寫,並且R執行HTTP重定向,使用新文件名向服務器發起第二個請求。

然後使用新的「文件夾」,並使用不調用另一個請求重寫規則指向他們回到原來的文件標記捕獲請求

ReWriteRule ^/rev/[0-9]+/(.*)$ $1 
相關問題