2011-03-02 58 views
1

我正在處理圖像,將處理後的圖像保存在緩存中,並將處理後的圖像輸出到客戶端。假設項目位於/ project /中,緩存位於/ project/cache /中,並且源映像位於服務器上的其他任何位置(如/ images /或/ otherproject/images /中)。我可以設置緩存來鏡像源圖像的路徑(例如,如果源圖像是/images/image.jpg,該圖像的緩存可能是/project/cache/images/image.jpg),並且請求到項目大致是/ project/path/to/image(例如/project/images/image.jpg)。mod_rewrite提供靜態緩存文件(如果它們存在並且源文件未更改)

我想盡可能高效地從緩存中提供圖像(如果存在的話)。但是,我也希望能夠檢查自創建緩存映像後源圖像是否已更改。理想情況下,這將全部使用mod_rewrite完成,因此PHP不需要用來完成任何工作。

這可能嗎? mod_rewrite規則需要做些什麼才能起作用?

另外,看起來mod_rewrite會在大多數時間提供緩存文件,但將X請求中的1個請求發送到PHP腳本以獲取緩存的文件將會是一個很好的折衷。這可能嗎?

回答

1

您無法訪問RewriteRule中的文件修改時間戳,因此沒有辦法使用PHP或其他編程語言來執行該任務。

另一方面,這在PHP中非常簡單,所以您應該首先檢查PHP解決方案是否足夠適合您的情況。只有不是,你應該尋找替代品。

+0

感謝您的回覆。 PHP解決方案似乎適合我的使用,但其他使用此項目的人員卻遇到了問題。對於緩存的文件,您是否有任何建議將1個X請求發送到PHP腳本? – 2011-03-03 14:20:06

0

如果您使用客戶端來完成某些工作,該怎麼辦?假設您在Web瀏覽器中顯示圖像,並始終使用src =「/ cache/images/foobar.jpg」並添加一個onerror =「this.src ='/ images/foobar.jpg'」。在mod_rewrite中,將任何發送到/ images/dir的內容發送到將返回並在緩存中生成圖像的腳本。

+0

這仍然不能解決更新緩存圖像的問題,如果它們得到更新。你在寫CDN服務嗎? :) – Detect 2011-03-02 22:35:16

+1

http://stackoverflow.com/questions/1318113/mod-rewrite-rewritecond-based-on-last-modified-htaccess – Detect 2011-03-02 22:38:21

+0

該項目不處理客戶端代碼,它被設計爲只處理請求,所以這不是一個選項。我在發佈我的廣告後發現了其他問題。看起來我最好的選擇可能是使用帶有一些隨機純文本的RewriteMap向腳本發送一些請求。 – 2011-03-02 22:42:32