ちょっと、mod_rewriteがどのようにしてURLを書き換えているのかを調べてみた。
http://net-newbie.com/trans/mod_rewrite.html

の「API フェーズ」にもあるように、また、プログラムを見ればすぐわかることだが、
mod_rewriteはtranslate_nameのフェーズかfixupのフェーズかを使っている。

以下、mod_rewriteのhook処理を登録している部分。

static void register_hooks(apr_pool_t *p)
{
    /* fixup after mod_proxy, so that the proxied url will not
     * escaped accidentally by mod_proxy's fixup.
     */
    static const char * const aszPre[]={ "mod_proxy.c", NULL };

    /* check type before mod_mime, so that [T=foo/bar] will not be
     * overridden by AddType definitions.
     */
    static const char * const ct_aszSucc[]={ "mod_mime.c", NULL };

    APR_REGISTER_OPTIONAL_FN(ap_register_rewrite_mapfunc);

    ap_hook_handler(handler_redirect, NULL, NULL, APR_HOOK_MIDDLE);
    ap_hook_pre_config(pre_config, NULL, NULL, APR_HOOK_MIDDLE);
    ap_hook_post_config(post_config, NULL, NULL, APR_HOOK_MIDDLE);
    ap_hook_child_init(init_child, NULL, NULL, APR_HOOK_MIDDLE);

    ap_hook_fixups(hook_fixup, aszPre, NULL, APR_HOOK_FIRST);
    ap_hook_translate_name(hook_uri2file, NULL, NULL, APR_HOOK_FIRST);
    ap_hook_type_checker(hook_mimetype, NULL, ct_aszSucc, APR_HOOK_MIDDLE);
}

どうして、2つのフェーズを利用しているかがはじめわからなかったが、
自分がどのフェーズでURLの書き換えをしなければいけないかを真面目に考えていき、
さらに、上のサイトの説明を読むようになって、まあ、理解が進んだ。

要するに、同じサーバ内で見るプログラム・ファイルレベルであればtranslate_nameのレベルでできる範囲がよい。
こうすることで、単純なファイル名決定ということで解決ができ、ほぼパフォーマンスに影響がなくできる。

.htaccessなんかで設定している場合には、ここで制約・ルールが変更されるケースがあるから、
translate_nameではこの制約・ルールが取り込まれた後の処理に対応することができるないので、fixupsで処理をする。
なので、同じサーバ内で見えるプログラム・ファイルであっても、
サブリクエストとして扱って、同じようなループをもう1回、回してあげることでApacheの設定を取り込んでいく。
つまり、そのプロセス内でLocationヘッダと同じ処理が動いてしまう。

接続が一度切れるという意味ではなくあくまでも内部なので、
それほど大きな影響でもないが、ファイル名の変換レベルの手軽さというレベルでもない。
ということだ。

ただ、実際、それよりもより影響がおおきな、mod_proxyを使って内部リダイレクトを使ってもパフォーマンスに影響がでるケースを聞いたことがないから、
ほぼ影響なしといってもいいかもしれないが・・・・
(プログラマにとってはという意味。プログラム自体がこの影響よりも数桁大きな負荷を作っているから、ということで・・・)

ただ、こんな感じに見ていくとやっと、Apacheのサブリクエストの意味がしっくりきてきた。
Apache外部にはそれほど関係がないが、Apache内部では意味合いが大きくことなるということだ。
これは、Apache内部を見る必要がある場合には重要だろうということもより見えてきた。

お仕事のご依頼・相談を承ります
この記事に関連するお仕事のご依頼やご相談をお待ちしております。 詳しくは、こちら

Leave a Reply

お仕事のご依頼・相談
この記事に関連するお仕事のご依頼やご相談をお待ちしております。 詳しくは、こちら
ソフトウェア&ライブラリ




ライブラリ
airxmail(en)
AIR版メール送受信ライブラリ
airxzip
AIR版ZIP圧縮・解凍ライブラリ
執筆書籍
本、雑誌等

WEB記事:CodeZine
執筆記事はこちら
カレンダー
2010年6月
« 5月   7月 »
 123456
78910111213
14151617181920
21222324252627
282930  

カスタム検索
RSS
Add to Google < !–adsense–>
アーカイブ
カテゴリ
にほんブログ村 IT技術ブログへ