确保两个Apache过滤器的执行顺序

时间:2012-06-19 08:22:53

标签: apache apache2-module

我需要确保我的自定义过滤器始终在 mod_rewrite 之前执行。根据{{​​3}},过滤器不会按确定的顺序运行:

  

请求处理轴很简单:阶段严格按顺序发生。但数据轴出现了混乱。为了获得最大效率,这是流水线的,因此内容生成器和过滤器不会以确定的顺序运行。因此,例如,您通常无法在输入过滤器中设置某些内容并期望它应用于生成器或输出过滤器。

如何确保两个过滤器的执行顺序,还是可能?


更新 有人Apache Tutormod_info显示有关模块及其顺序的详细信息。

1 个答案:

答案 0 :(得分: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页面以了解其他类型的挂钩,或者更好地了解如何控制挂钩调用顺序。