2017-07-19 94 views
0

所以我正在努力使自己的apache模塊。現在我試圖讓它返回一個403來測試它,但似乎apache只是完全忽略模塊並返回默認頁面。這裏是我的代碼的相關部分:阿帕奇忽略自定義模塊

static int request_hook(request_rec* r){ 
    return HTTP_FORBIDDEN; 
} 

/* ******************************************** 
    Register module to Apache 
    ******************************************** */ 

static void register_hooks(apr_pool_t *p) 
{ 
    // We want to hook first so we can issue a deny ASAP if needed 
    ap_hook_log_transaction(request_hook, NULL, NULL, APR_HOOK_REALLY_FIRST); 
} 

module AP_MODULE_DECLARE_DATA my_module = { 
    STANDARD20_MODULE_STUFF, 
    NULL,    /* dir config creater */ 
    NULL,      /* dir merger --- default is to override */ 
    NULL,      /* server config */ 
    NULL,      /* merge server configs */ 
    NULL,     /* command apr_table_t */ 
    register_hooks    /* register hooks */ 
}; 

我的Apache配置文件看起來是這樣的:

<VirtualHost *:80> 
     DocumentRoot /var/www/html 
     SetHandler  my_module 
</VirtualHost> 

它是由做

sudo apxs -i -a -c my_module.c && sudo service apache2 restart 
+0

你需要告訴Apache來加載在Apache實例級別的模塊,而不是網站的水平。根據您的Apache安裝情況,您可能會有一個loadmodules.conf文件,其中包含Apache應加載的所有模塊。否則,你可以添加到你的HTTPD.conf「LoadModule module_name /path/on/your/disk/to/moduel.so」 – falconspy

+0

我在/ etc/apache2/mods啓用了my_module.load文件,如果我加載模塊手動在虛擬主機配置我看到日誌「my_module已經加載」。 –

+0

你的模塊應該在403禁止上做什麼? 403禁用的東西是Apache核心的一部分,如果我沒有弄錯,所有你可以做的就是自定義你的403錯誤頁面。 – falconspy

回答

0

固定編制。問題是功能:

ap_hook_log_transaction(request_hook, NULL, NULL, APR_HOOK_REALLY_FIRST); 

應該是:

ap_hook_handler(request_hook, NULL, NULL, APR_HOOK_REALLY_FIRST);