带有和不带“.c”扩展名的apache模块有什么区别?

我在Ubuntu 14.04上运行apache v2.4,并有这个格式的容器/指令

<IfModule mpm_prefork_module> # ... </IfModule> 

不过,我经常在apache官方文档和stackexchange站点中看到这样的模块:

 <IfModule prefork.c> # ... </IfModule> 

我搜查了很多,包括这里 – http://httpd.apache.org/docs/2.4/mod/core.html#ifmodule和我无法find什么区别是什么时候应该被用于其他?


以重写模块为例

从apache 文档:ifmodule指令

模块参数可以是模块标识符或模块的文件名,在编译时。
例如,rewrite_module是标识符,而mod_rewrite.c是文件名。

而且在.htaccess文件中看到这个很常见

 <IfModule mod_rewrite.c> # .... </IfModule> 

我的grep '编辑我的/etc/apache2目录和“mod_rewrite.c”没有定义任何地方。

在我的机器上的文件/etc/apache2/mods-available/rewrite.load
包含:

 LoadModule rewrite_module /usr/lib/apache2/modules/mod_rewrite.so 

所以是mod_rewrite.c对Windows /其他文件的引用? 在这种情况下在Linux机器上引用它将是不正确的语法?

在您链接到的页面中,它包含以下文本:

模块参数可以是模块标识符或模块的文件名,在编译时。 例如,rewrite_module是标识符,而mod_rewrite.c是文件名。 如果一个模块由多个源文件组成,请使用包含stringSTANDARD20_MODULE_STUFF的文件的名称。

使用提供的示例,重写模块可以称为“rewrite_module”(标识符)或mod_rewrite.c(文件名)。 两者都是相同的,没有区别。 你也可以使用。

具有源文件mod_rewrite.c的模块被编译成mod_rewrite.so,这就是你的文件系统。 这个源文件有一行'module AP_MODULE_DECLARE_DATA rewrite_module;' 其中声明了一个名为“rewrite_module”的模块。

这个模块可以被称为“rewrite_module”,它是标识符,或者是“mod_rewrite.c”,它是编译的源文件。

'LoadModule'行告诉它从已编译的对象mod_rewrite.so中加载带有标识符'rewrite_module'的模块。 当你configuration这个,你可以参考标识符或源文件名,如果你知道的话。

正如@DanielLawson已经指出的那样,这在你正在链接的Apache手册页中有清楚的描述。

模块参数可以是模块标识符或模块的文件名,在编译时。

模块的文件名以.c扩展名结尾,因为C是Apache httpd开发的语言。

模块标识符的概念又类似于Stack Exchange的标签。 您的<IfModule mpm_prefork_module>块读取:如果您有任何模块标记为mpm_prefork_module 。 这允许configuration具有更好的灵活性 – 提供相同function的不同模块,如mod_ssl.cmod_gnutls.c都有ssl_module标识符。