Koss

黒魔術 mod_rewrite の具体的な設定方法(その1)

[サイト作成]2004-12-14

ふぅ、今日も午前様だワン。

切り番?=100番目の記事なので、少しは人様の参考になる?ものを書こう(笑)。わこ先生のご指導のたまものである。多謝。


mod_rewrite というと、mod_rewrite モジュール URL 書き換えエンジン と、A Users Guide to URL Rewriting with the Apache Webserver が有名なのだけれど、これを読んだだけでは、具体的に何をどうしたら良いか良くわからんのだ。で、ググってこのサイトに来る方がいらっしゃる。ところが何も書いていないのでガッカリして帰るのだ。スンマセン。

なんで黒魔術かと言うと、上のサイトによれば

mod_rewrite のすばらしいところは、 Sendmailのような設定性と柔軟性を与えてくれるところだろう。 また、mod_rewrite のよくないところは、 Sendmailのような設定性と柔軟性を与えてくれるところだろう。

-- Brian Behlendorf
Apache Group

膨大な設定例やドキュメントがあるにもかかわらず、 mod_rewrite は黒魔術である。かなりイケてるっぽい黒魔術だが、 やっぱり所詮は黒魔術である。

-- Brian Moore
bem@news.cmc.net

なのだそうだ。


中略(笑)


簡単に設定の仕方を書いておくと、

LoadModule rewrite_module /usr/lib/apache/1.3/mod_rewrite.so

で、mod_rewraite をロードする。http.conf の中でデフォルトではコメントアウトされているはずなので、コメントアウト記号( # )を外すだけ。

RewriteEngine On

で、モジュールを動作させるように設定。さらに

RewriteMap lowercase int:tolower

として、apache関数を使って文字列を小文字に統一。

RewriteCond ${lowercase:%{SERVER_NAME}} blog.koss.jp

は Virtual Host のホスト名の制約を掛ける宣言。そうしないと、他の Virtual Host と次の Rewite Rule で、同じ文字列を使えなくなる。

RewriteCond %{REQUEST_URI} ^/pets/

RewriteCond で 文字列の Rewrite を仕掛ける条件を設定。最初( ^ )に /pets/ という文字列があったら何かする、という意味。

RewriteRule /([^/]+)/([^/]+)/$ /var/httpd/${lowercase:%{SERVER_NAME}}/java/index.jsp?ct=1&id=$1&page=$2 [L]

RewriteRule で文字列の書き換えルールを設定する。/([^/]+)/([^/]+)/$ は http://blog.koss.jp/pets/dog/10/ の /dog/10/ の部分の値を表す文字列を引っ掛ける正規表現。そこで取り出した値を、プログラム実態の引数に渡す=/var/httpd/blog.koss.jp/java/index.jsp?ct=1&id=dog&page=10 というファイル名に置き換えて実行する、という意味。ここの path はファイルシステムの path になるので、それぞれの環境に合わせて適宜読み替える。

最後の [L] はここで処理をお仕舞いにするという意味。

この例の path を URI で表現すると、http://blog.koss.jp/index.jsp?ct=1&id=dog&page=10 になる。

あと、http://blog.koss.jp/pets/dog/10/ にさらに引数を渡したい場合はQSA(Query String Append) オプションを付けるとOK。具体的には、[L] を [L,QSA] にするだけ。

これで、http://blog.koss.jp/pets/dog/10/?food=proplan という仮想の文字列を http://blog.koss.jp/index.jsp?ct=1&id=dog&page=10&food=proplan という URI で index.jsp というプログラムに渡す事が出来るようになる。

RewriteCond, RewriteRule は複数の設定を続けて書けばいくつもの条件の設定が出来るので、プログラムの条件分岐と同じような要領で分岐のさせかたを考えると結構いろいろな事が出来る。ただし、RewriteCond の値をいきなり変数化するのはオーバヘッドが増えるのであまり宜しくないらしい。

http.conf を変更した後 Apache を restart すると設定が反映される。

この例はあくまで仮定の例なので、この URI を叩いても何も出てきませんのであしからず。

ちなみにこのサイトは Ruby & eRuby で作っている。JAVA や JSP ではない。文例での拡張子が jsp なのはほんの冗談です(笑)。試しにindex.jspを見てね。これも実は eRuby でありんす。拡張子など何でも良いのだ (^^;。

Create:[2004-12-15 01:52:20] Update:[2004-12-15 11:16:58] [100]

[コメント0件] [トラバ0件] [トラックバック URL→ http://blog.koss.jp/tb_100.rec]

《Prev [サイトの機能の追加と変更][ストレス解消にノイズキャンセリングイヤホンを買ってみた] Next》

English

Chinese

Korean

User
Password

 2004年 12月 
            1234
567891011
12131415161718
19202122232425
262728293031    

Ask me
Registration
RSS

Others上のrare httpuaでちゃんとご覧頂けていますでしょうか?

当サイトは Firefox をメインターゲットとして作成されています。