我正在實現動態生成圖像的緩存系統。該腳本通過/img/type/param1/param2.png
調用,其中可能有多種類型,參數數量可變。該腳本生成圖像並將其轉儲到磁盤。.htaccess mod_rewrite:通過檢查文件是否存在啓用緩存
我想.htaccess
規則,請求圖像生成腳本時:
- 檢查,看是否有緩存文件存在
- 如果有的話,mod_rewrite的該高速緩存文件
- 如果沒有,別「噸做任何事情,這樣的腳本運行
我至今被稍微修改的邏輯:
- 的mod_rewrite到緩存文件將是
- 檢查,以查看該文件是否存在
- 如果不是,再次mod_rewrite的請求
如果有一個更好的方式來做到這一點,我d愛聽到它。在任何情況下,我的.htaccess文件的相關部分:
RewriteRule ^img/(type1|type2)/(.*)$ /images/cache/$1/$2
RewriteCond /^(.*)$ !-f
RewriteRule images/cache/(.*) /img/$1
這看起來不太合適。調試它,我插入第一重寫規則後,下面的(目標頁面只是清除其輸入):
RewriteRule ^(.*)$ /htaccess.php?url=$1 [END]
其結果是,我得到:
Array
(
[url] => /images/cache/a/l/300.png/a/l/300.png
)
我不明白爲什麼$2
包含l/300.png/a/l/300.png
而不僅僅是l/300.png
。
如果我將第一個RewriteRule更改爲包含[L]
,我會得到預期結果。但是,我在第二個RewriteRule上遇到完全相同的「雙重匹配」問題,該問題將請求恢復回非緩存版本。但是,將[L]
添加到此第二個重寫規則中:
RewriteRule ^img/(type1|type2)/(.*)$ /images/cache/$1/$2 [L]
RewriteCond /^(.*)$ !-f
RewriteRule images/cache/(.*) /img/$1 [L]
會產生內部服務器錯誤。
我在做什麼錯,我該如何解決這個問題?
這完美地工作,非常感謝你。爲了我自己的教化,爲什麼我的努力沒有奏效? – Mala
@Mala我不是100%肯定的,但你可能想用'RewriteCond%{REQUEST_FILENAME}替換'RewriteCond /^(.*)$!-f'!因爲新的URI是/ images/cache之一 –