2015-10-15 29 views
1

我需要重寫一個圖像文件的URL。這是最簡單的部分,看起來像這樣:我如何重寫已經重寫的文件,如果找不到

RewriteRule ^img[/]?(/[^.]+)?$ - [L] 
RewriteRule ^img/([A-Za-z0-9_-\s]+)/([A-Za-z0-9_\-\s\.]+)?$ cache/$1-$2 [L] 

但是,如果圖像文件沒有在高速緩存目錄中找到我需要再次改寫這個PHP腳本將創建圖像,並將其保存在高速緩存目錄。

我嘗試了以下重寫,但它不能按預期工作。相反,無論文件是否存在於緩存中,所有圖像URL都會重寫爲PHP文件。

#RewriteCond cache/%{REQUEST_FILENAME} !-f 
#RewriteCond cache/%{REQUEST_FILENAME} !-d 
#RewriteRule ^cache/([A-Za-z0-9_\s]+)-([A-Za-z0-9_\-\s\.]+)?$ createimg.php?type=1&hash=$1&filename=$2 [L] 

任何想法?謝謝。

+0

我確定你應該在'%{REQUEST_FILENAME}'之前移除'cache /',然後它就會工作。 – Sumurai8

+0

謝謝,這似乎工作,但現在任何未找到的文件將被重定向到該PHP腳本,而不僅僅是未找到緩存文件。我可以通過在PHP腳本上重定向到404來解決此問題,但希望獲得更優雅的解決方案。 – fitzcarraldo

+0

實際上忽略了我上面的評論,它只會重寫緩存文件,因爲重寫規則......再次感謝! – fitzcarraldo

回答

0

由於在第一條規則之後,相同的規則將與新的url相匹配,因此url已經包含「cache /」。相應地更新%{REQUEST_FILENAME}和其他魔術變量。因此你不需要在變量前加上「cache /」。

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^cache/([A-Za-z0-9_\s]+)-([A-Za-z0-9_\-\s\.]+)?$ createimg.php?type=1&hash=$1&filename=$2 [L]