1

CMS 用のオンザフライ サムネイル クリエーターを作成しており、ファイルが存在するかどうかを動的に確認する必要があります。現在、リクエストしているファイルが存在するかどうかを確認する htaccess ファイルを作成しましたが、もう少し高度で、送信された URL オプションに基づいてファイル チェックを「作成」する必要があります。

これが私が現在持っているものです(名前ではなくイメージ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]

この URL に基づく:

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

「クロップ」はオプションなので、これを使用しない場合、以前の URL は次のようになります。

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には多くのオーバーヘッドがあるため、これはより高速だと思いました。

事前に何か助けてくれてありがとう!

4

1 に答える 1

3

rewritecond ドキュメントから

RewriteRule 後方参照: これらは $N (0 <= N <= 9) の形式の後方参照であり、現在の RewriteCond 条件のセットに従う RewriteRule から、パターンのグループ化された部分 (括弧内) へのアクセスを提供します。 .

RewriteCond 後方参照: これらは、%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
于 2011-06-09T19:25:27.797 に答える