Qual é a diferença entre os módulos do Apache com e sem a extensão “.c”?

1

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 do stackexchange desta forma:

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

Eu pesquisei muito, incluindo aqui - link e sou incapaz de descobrir qual é a diferença e quando se supõe que uma seja usada sobre a outra?

Pegue o módulo de reescrita, por exemplo

Da documentação do apache : diretiva ifmodule

The module argument can be either the module identifier or the file name of the module, at the time it was compiled.
For example, rewrite_module is the identifier and mod_rewrite.c is the file name.

E é muito comum ver isso em .htaccess files

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

Ive grep 'meu diretório /etc/apache2 e "mod_rewrite.c" não está definido em lugar algum.

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.c uma referência a um arquivo windows / other? Nesse caso, referir-se a ele em uma máquina linux seria sintaxe incorreta?

    
por Michael Coleman 25.02.2015 / 06:14

2 respostas

4

Na página que você vinculado , ele contém este texto:

The module argument can be either the module identifier or the file name of the module, at the time it was compiled. For example, rewrite_module is the identifier and mod_rewrite.c is the file name. If a module consists of several source files, use the name of the file containing the string STANDARD20_MODULE_STUFF.

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

O módulo com o arquivo de origem mod_rewrite.c, é compilado em mod_rewrite.so, que é o que você terá em seu sistema de arquivos. Este arquivo de origem tem a linha 'module AP_MODULE_DECLARE_DATA rewrite_module;' nela, 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 de origem do qual foi compilado.

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

    
por 25.02.2015 / 09:00
1

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

The module argument can be either the module identifier or the file name of the module, at the time it was compiled.

O nome do arquivo do módulo termina com uma extensão .c , já que C é o idioma em que o Apache httpd é desenvolvido.

Um conceito de identificadores de módulo é, por sua vez, semelhante às tags do Stack Exchange. O seu bloco <IfModule mpm_prefork_module> diz: se você tem algum módulo marcado como mpm_prefork_module . Isto permite uma melhor flexibilidade na configuração - diferentes módulos oferecendo a mesma funcionalidade, como o mod_ssl.c e o mod_gnutls.c ambos têm identificador ssl_module     

por 25.02.2015 / 07:34

Tags