.htaccess で RewriteCond の後方参照

$1 ではなく %1 のお話です。

今まで画像をキャッシュしたり生成したりというのは
全部プログラム側で書いてたわけですが、

if (file_exists(IMG_CACHE_DIR.$cacheFile)) {
    $image = imagecreatefromjpeg (IMG_CACHE_DIR.$cacheFile);
} else {
    $image = imagecreatefromjpeg ($imgBack);
    //画像加工処理
    imagejpeg($image,IMG_CACHE_DIR.$cacheFile);
}
header("content-type: image/jpg");
imagejpeg($image);
imagedestroy($image);

まあこんなかんじで、キャッシュヒットもプログラム側で書いてたわけで、
これがどうにも地味に遅いので、何とか回避するべく頭をひねったお話です。

でまあ結論から言うと .htaccess のほうで
キャッシュヒットの処理を書いてしまうことに。

こんなかんじです。

//ファイルが画像の場合
RewriteCond %{REQUEST_URI} ^(.*\.(jpg|gif|png|jpeg))$

//cacheフォルダのキャッシュとヒットするか確認
RewriteCond %{DOCUMENT_ROOT}/cache/%1 -f

//ヒットしたらリライトして表示させる
RewriteRule .* /cache/%1 [L]

ポイントは %1 を使ってRewriteCondでヒットさせた参照を使用することで、
http://a.com/a.gif がキャッシュファイルである http://a.com/cache/a.gif
にヒットさせるってとこですかね。
今まで$1とかしか使ってなかったわけですが、%のが便利だなーと。

Leave a Reply