Qual é a diferença entre módulos Apache com e sem extensão ".c"?

Qual é a diferença entre módulos Apache com e sem extensão ".c"?

Estou executando o Apache v2.4 no Ubuntu 14.04 e tenho contêineres/diretivas neste formato

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

No entanto, muitas vezes vejo módulos referenciados na documentação oficial do Apache e em sites stackexchange desta forma:

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

Eu procurei muito, inclusiveaqui-http://httpd.apache.org/docs/2.4/mod/core.html#ifmodulee não consigo descobrir qual é a diferença e quando uma deve ser usada em vez da outra?


Veja o módulo de reescrita, por exemplo

Do apachedocumentação: diretiva ifmodule

O argumento do módulo pode ser o identificador do módulo ou o nome do arquivo do módulo, no momento em que foi compilado.
Por exemplo, rewrite_module é o identificador e mod_rewrite.c é o nome do arquivo.

E é muito comum ver isso em .htaccessarquivos

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

Eu grepeditei meu /etc/apache2diretório e "mod_rewrite.c" não está definido em lugar nenhum.

Na minha máquina o arquivo /etc/apache2/mods-available/rewrite.load
contém:

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

então é mod_rewrite.cuma referência a um arquivo do Windows/outro? nesse caso, referir-se a ele em uma máquina Linux seria uma sintaxe incorreta?

Responder1

Na página vocêvinculadopara, contém este texto:

O argumento do módulo pode ser o identificador do módulo ou o nome do arquivo do módulo, no momento em que foi compilado. Por exemplo, rewrite_module é o identificador e mod_rewrite.c é o nome do arquivo. Se um módulo consistir em vários arquivos de origem, use o nome do arquivo que contém a string STANDARD20_MODULE_STUFF.

Usando o exemplo fornecido, o módulo de reescrita pode ser referido como 'rewrite_module' (identificador) ou mod_rewrite.c (nome do arquivo). Ambos são equivalentes e não há diferença. Você pode usar qualquer um.

O módulo com o arquivo fonte mod_rewrite.c é compilado em mod_rewrite.so, que é o que você terá em seu sistema de arquivos. Este arquivo fonte possui a linha 'module AP_MODULE_DECLARE_DATA rewrite_module;' nele, que declara um módulo chamado 'rewrite_module'.

O módulo pode ser referido como 'rewrite_module', que é o identificador, ou 'mod_rewrite.c', que é o arquivo fonte do qual foi compilado.

A linha 'LoadModule' diz para carregar o módulo com o identificador 'rewrite_module' do objeto já compilado mod_rewrite.so. Ao configurar isso, você pode consultar o identificador ou o nome do arquivo de origem, se souber.

Responder2

Como @DanielLawson já apontou, isso está claramente descrito na página de manual do Apache que você está vinculando.

O argumento do módulo pode ser o identificador do módulo ou o nome do arquivo do módulo, no momento em que foi compilado.

O nome do arquivo do módulo termina com um.cextensão, já que C é a linguagem em que o Apache httpd é desenvolvido.

Um conceito de identificadores de módulo é, por sua vez, semelhante às tags do Stack Exchange. Seu <IfModule mpm_prefork_module>bloco diz: se você tiver algum módulo marcado comompm_prefork_module. Isto permite uma melhor flexibilidade na configuração - módulos diferentes que oferecem a mesma funcionalidade, comomod_ssl.cemod_gnutls.cambos têmmódulo_sslidentificador.

informação relacionada