2012-06-19 40 views
3

我需要確保我的自定義篩選器始終在mod_rewrite之前執行。按照Apache Tutor過濾器不以確定性順序運行:確保兩個Apache篩選器的執行順序

請求處理軸是直接的:相位,以便嚴格地發生。但數據軸出現混亂。爲了獲得最高效率,這是流水線操作,因此內容生成器和過濾器不會按確定性順序運行。因此,例如,您通常無法在輸入過濾器中設置某些內容,並期望將其應用於生成器或輸出過濾器中。

如何確保兩個過濾器的執行順序,還是有可能的?


更新: 有人有indicatedmod_info以顯示模塊和他們的訂單的詳細信息。

回答

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頁等各類掛鉤,或更好地理解如何控制掛鉤調用訂單。