我正在编写一个Apache模块,但我对目录配置合并功能的行为感到困惑。
在mod_example的来源中,参数标记如下:
static void *x_merge_dir_config(apr_pool_t *p, void *parent_conf, void *newloc_conf);
但是给出了这样的指令:
<Location /path/>
MyOption value-from-path
</Location>
<Location />
MyOption value-from-root
</Location>
当由于访问http://localhost/path/而调用此函数时,将调用该函数,其中parent_conf来自/path/
而newloc_conf来自/
,这恰好与基于这些参数的名称,我期望什么。我会将“/”描述为父级,将“/ blog /”描述为子/从属/最具体的路径。
我正在试图弄清楚真实的故事在这里。 Apache使用“父”这个词的方式与我不同吗? mod_example是否错误地错误地命名了这些参数?我只是困惑吗?
答案 0 :(得分:1)
据我所知,“父”/“新”args更多地与Apache应用配置指令的顺序有关,而不是与这些指令相关联的路径名。如你所知,它从每服务器开始,然后是vhost,然后是Location
部分等,此列表中的后续指令覆盖了之前的指令。合并回调的工作是计算用“newloc”中的东西覆盖“父”中的东西的结果。
如果多个“位置”部分与请求匹配,请they are applied in the order they appear in the config file。因此,当合并MyOption value-from-root
时,它是“新的”配置 - 它在value-from-path
之后应用 - 所以它在“newloc”arg中,并且计算到那时为止,包括value-from-path
,在“父母”中。
(顺便说一下,除非你的模块有一个不寻常的合并行为,这意味着你可能想要交换两个Location部分的顺序。第二个,对于root,将总是应用,并且可能会阻止第一个产生明显效果。)