【发布时间】:2017-07-19 16:03:03
【问题描述】:
所以我正在尝试制作自己的 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
【问题讨论】:
-
您需要告诉 Apache 在 Apache 实例级别而不是网站级别加载模块。根据您安装的 Apache,您可能有一个 loadmodules.conf 文件,其中包含 Apache 应加载的所有模块。否则你可以添加到你的 HTTPD.conf "LoadModule module_name /path/on/your/disk/to/moduel.so"
-
我在 /etc/apache2/mods-enabled 中有 my_module.load 文件,如果我在 vhost 配置中手动加载模块,我会在日志中看到“my_module 已加载”。
-
你的模块在 403 被禁止的情况下应该做什么? 403 被禁止的东西是 Apache 核心的一部分,如果我没记错的话,你所能做的就是自定义你的 403 错误页面。
-
我的目标是让 apache 在启用模块时返回 403 禁止响应,而不是 HTTP 200 响应。
-
所以您正在有效地尝试创建自己的维护模块?如果是这样,这个页面可能是一个很好的指南,告诉你如何在不编写模块的情况下做到这一点shellhacks.com/redirect-site-maintenance-page-apache-htaccess
标签: apache apache-modules