- PR -

apacheでURLの参照ファイルの有無を条件に処理を分岐する

1
投稿者投稿内容
boonyang
会議室デビュー日: 2004/10/19
投稿数: 1
投稿日時: 2004-10-19 16:39
初投稿です。至らないところがありましたらご容赦ください。

現在、WEBアプリケーションを作製しているのですが、画像の管理をやりやすくするため、
imgタグで呼ばれる画像を、サーバー上にそのファイルがあるかどうかで条件分岐し、
あればその画像を表示し、なければ別URLの画像に置き換えるといった処理を
apache上で行いたいと考えております。動作概要は以下の通りです。

www.web.comをWEBアプリサーバー、www.img.comを画像専用WEBサーバーとします。
www.img.comには必要な全ての画像が置いてあるものとします。

apacheのDocumentRootはそれぞれhtdocsとし、以下のように画像が置いてあるとします。
www.web.com - htdocs - img - a.gif
www.img.com - htdocs - img - a.gif,b.gif,c.gif

<img src="http://www.web.com/img/a.gif">
この場合、指定されているURLが存在しますので、この画像を表示します。

<img src="http://www.web.com/img/b.gif">
この場合、指定されたURLが存在しないので、リクエストURLを
http://www.img.com/img/b.gif に書き換えてそちらの画像を表示します。

画像のNot found時にリダイレクトさせればよいと考え、下のような方法を考えついたのですが
<FilesMatch "\.(gif|jpeg|jpg|png)$">
ErrorDocument 404 http://www.img.com/img/????
</FilesMatch>
FilesMatch が後方参照できないのと、たとえできたとしても、大抵の場合は
最初から画像がない場合が多いので、エラーログに大量のエラーが記録されてしまう
という理由により使えなさそうです。(LogLevelをerror以上に上げたくないので)

mod_rewriteを使用した方法も考えておりますが、どうしても「ローカルにリクエストされた
ファイルが存在しなければURL上書き」の処理分岐ができずに悩んでおります。

アプリケーション自体はPHPで書かれており、テンプレート置換により動的にページを
生成するのですが、最初は出力バッファリングをONにし、最終的な出力の直前でバッファの内容
から<img>タグの参照画像を抜き出し、全画像に対してローカルにあるかどうかをチェックし、
ローカルになければ<img>タグ内のURLを画像サーバーのものに書き換えるような
動作を考えましたが、それでは画像の管理性向上と、この処理によってかかる負荷の
トレードオフが成立しないような気がしまして、apacheでそのような動作が実現できる
のではないかと考えたのですが、行き詰まってしまいました。

実行環境は以下の通りです。
Fedora Core release 2 (Tettnang)
Apache/1.3.31
PHP 4.3.9

良い方法をご教授いただけましたら幸いです。
よろしくお願い致します。
1

スキルアップ/キャリアアップ(JOB@IT)