去年の今頃書いた 画像もDBに格納して管理する -扱いがめんどうなLOB(ラージオブジェクト)は使わない方法も含め(2008/8)と、こないだのCoolなURLを作るには(2008/7)の記事は、URLの処理をちょこっと工夫してシアワセになろうよ、という点で共通している。ついでなのでまとめて続編みたいなことをしてみようかと。 まず、画像もDBに格納して管理するで紹介したmod_rewrite設定が実はおかしいという、約1年後のいま明かされる真実(笑)。 と言っても本格的に間違ってるわけじゃなく結果的な動作に問題は無い。ただちょっと余計なものがある。 RewriteCond %{REQUEST_FILENAME} ^dbimage_\d+\.(jpg|gif|png)$ RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^.*dbimage_(\d+)\.(jpg|gif|png)$ /getimgfromdb_and_makefile.php?id=$1&type=$2 [R] 一番最後の[R]はいらない(と思う。めんどいので未検証)。 RはつまりRedirectのことで、指定したURIにHTTPリクエストしなおせ!とブラウザに伝えてくれるのだが、よく考えるとそんなことをせんでもここまででリライト処理はできている。あとはほっといてもサーバはブラウザに /getimgfromdb_and_makefile.php?id=$1&type=$2 の結果を返してくれるので目的は達成される。 しいて言えば[R]の代わりに[L]と書くべき。これはlastの意味で、そこでリライト処理を終了してくれる(その後にrewrite設定が続いていても無視)。 次に、現場の状況によっては逆のパターンのほうがいいかもしれないという話。 RewriteCond %{REQUEST_FILENAME} /getimgfromdb_and_makefile.jsp RewriteCond %{QUERY_STRING} id=([0-9a-z]+)&type=(jpg|gif|png) RewriteCond /home/htdocs/imagecache/dbimage_%1.%2 -f RewriteRule .* /imagecache/dbimage_%1.%2 [L] # 注:画像のキャッシュファイルはDocumentRoot配下ではなく /var/tmp/ 配下とか # とにかく別なところに置いてAliasを張ったほうが管理しやすいと思う。 # そんな事情もあるので、本ブログで書いているapacheの設定は # 本来はvirtualHostやAlias設定なども使ってもうちょっと本格的な設定に # すべきだが、安価な共用型レンタルサーバでも使えるように # .htaccessファイル上で設定できる(そうな)書き方をしている。 # 要するにこれらはあくまで最低限の設定例に過ぎないです。 つまり、
http://example.co... を
http://example.co... にリライトする方法。ただしDB上の画像が既にキャッシュファイル化されいてdbimage_abcd1234.jpgとしてファイルが存在するときに、という条件つき。 Web層とAP層が明確に分かれている場合にはこっちのほうがいいんじゃないだろうか。典型的なのはWebサーバがApacheでAPサーバがTomcatというケース。 Tomcat上でjavaアプリを動かす場合、開発者は自分のPC上にTomcatサーバだけをを立てて開発をしていることがある。apacheを経由してないのでmod_rewriteが効かないため、<img src="dbimage_12345.jpg" /> と書いてあっても画像が出ない。上の方法だと<img src="getimgfromdb_and_makefile.jsp?id=12345&type=jpg" /> という一つの書き方で、本番環境のApache+Tomcatならばmod_rewriteによるキャッシュ機構が働くし、開発過程でのTomcatオンリーな環境であっても画像は(キャッシュ機構は動かないけど)表示される。 また、画像キャッシュ機構のオン/オフを切り替える機能の実装もやりやすくなるだろう。 話は変わって今度はCoolなURLの作り方の件。 geekデータベースアプリが
http://example.co... 、bookデータベースアプリが
http://examle.com... だとして、そのサイトのトップページを同じMVCフレームワークで動的にやりたいとすると、トップページのurlは
http://example.co... とか
http://example.co... とかになっちゃうの!?かっこ悪くね? という意見をいただいた。 ...