3

カスタムフィルターが常にの前に実行されるようにする必要がありmod_rewriteます。Apache Tutorによると、フィルターは決定論的な順序で実行されません。

リクエスト処理軸は単純です。フェーズは厳密に順番に発生します。しかし、データ軸に混乱が生じます。効率を最大化するために、これはパイプライン化されているため、コンテンツジェネレーターとフィルターは決定論的な順序で実行されません。したがって、たとえば、一般に、入力フィルターに何かを設定して、それがジェネレーターまたは出力フィルターに適用されることを期待することはできません。

2つのフィルターの実行シーケンスを確実にする方法、またはそれは可能ですか?


更新: 誰かがモジュールとその順序に関する詳細情報を表示するように指示しました。mod_info

4

1 に答える 1

4

これを理解する最善の方法は、apache のソース コードを調べることです。ap_hook_fixups の mod_proxy と mod_rewrite の使用法は、特定のモジュールの前後にフックを挿入する方法の完璧な例です。

mod_rewrite の前にフックを挿入したい場合は、次のようにします。

static int my_fixup(request_rec *r)
{
    /* do something with request headers before it goes to the mod_rewrite */
    return OK;
}

static void register_hooks(apr_pool_t *p) {
    static const char * const aszSucc[] = {"mod_rewrite.c", NULL};
    ap_hook_fixups(my_fixup, NULL, aszSucc, APR_HOOK_FIRST);
}

また、http://httpd.apache.org/docs/2.2/developer/hooks.htmlページで他の種類のフックを確認したり、フックの呼び出し順序を制御する方法をよりよく理解することができます。

于 2012-10-18T18:31:18.583 に答える