2011-06-09 89 views
1

我正在爲CMS編寫動態縮略圖創建器,並需要動態檢查文件是否存在。我目前已經創建了一個htaccess文件,用於檢查您請求的文件是否存在,但需要它更高級一些,並根據提交的URL選項「創建」文件檢查。htaccess:根據變量檢查文件是否存在

這是我目前有(基於圖像的ID,而不是名稱):

RewriteEngine on 

#Check for file existence here and forward if exists 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^([0-9]+)-([0-9]+)-([0-9]+)(-(crop))?\.jpg$ thumbnail.php?id=$1&w=$2&h=$3&c=$4 [L,QSA] 

基於此網址:

this-is-the-image-name.gif?w=200&h=100&c=true 

一個htaccess文件,檢查文件是否存在:

this-is-the-image-name-gif-200-100-crop.jpg 

如果它不存在它RewriteRules用戶:

thumbnail.php?name=this-is-the-image-name&type=gif&w=200&height=100&c=true 

「剪裁」是可選的,所以沒有它前面的網址是這樣的:

this-is-the-image-name.gif?w=200&h=100 
this-is-the-image-name-gif-200-100.jpg 
thumbnail.php?name=this-is-the-image-name&type=gif&w=200&height=100 

基本上,我需要的RewriteCond檢查文件是否存在,基於它創建基於文件名REQUEST_FILENAME。有任何想法嗎?

事情是這樣的:

RewriteCond ^([a-zA-Z0-9-]+).(jpg|gif|png)?w=([0-9]+)&h=([0-9]+)(&c=(-crop))?\.jpg$ %$1-$2-$3-$4-$6.jpg !-f 

甚至不知道這是可能的......在這種情況下,我會向前所有請求到PHP文件,但由於PHP有很多開銷我認爲這會更快。

非常感謝您提前提供任何幫助!

回答

3

從的RewriteCond文檔

重寫規則反向引用:這些是形式$ N的 反向引用(0 < = N < = 9),其提供進入 分組份(括號內)的的 圖案,從作爲 受到當前的一組 的RewriteCond條件重寫規則..

的RewriteCond 反向引用:帖e爲形式%N的 反向引用(1 < = N < = 9),其中(再次,在括號內)提供通向 分組部件圖案的 ,從當前組的最後匹配 的RewriteCond 條件。

# file is a gif 
RewriteCond %{REQUEST_FILENAME} .gif$ 

# capture the and params in() backreferences 
RewriteCond %{QUERY_STRING} w=(200)&h=(100)&c=true 

# only rewrites for files that do not exist 
RewriteCond %{REQUEST_FILENAME}-gif-%1-%2-crop.jpg !-f 

# this rewrites not found thumbs to your php script 
RewriteRule %.*$ thumbnail.php?name=%{REQUEST_FILENAME}&type=gif&w=%1&height=%2&c=true 
+0

這正是我所期待的。當我導航到:this-is-the-image-name.gif?w = 200&h = 100&c = true'時,它現在似乎沒有轉發,而是它說:'未找到:請求的URL/dev/media /thumbnails/this-is-the-image-name.gif未在此服務器上找到。雖然沒有收到內部服務器錯誤,所以它似乎是正確的語法。 – RANGER 2011-06-09 19:43:43

+0

忘記在評論中標記你的句柄;) – RANGER 2011-06-09 19:44:27

+1

所以這似乎是工作,除了規則規定,只有* last * RewriteCond的反向引用將被使用...因爲該文件不會總是一個gif(jpg | gif | png)我需要找到一種方法來保存第一個RewriteCond的文件類型。我還將'REQUEST_FILENAME'換成了'REQUEST_BASENAME' ... – RANGER 2011-06-09 21:30:48