Was ist der Unterschied zwischen Apache-Modulen mit und ohne die Erweiterung „.c“?

Was ist der Unterschied zwischen Apache-Modulen mit und ohne die Erweiterung „.c“?

Ich verwende Apache v2.4 auf Ubuntu 14.04 und habe Container/Direktiven in diesem Format

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

In der offiziellen Apache-Dokumentation und auf Stackexchange-Sites sehe ich jedoch häufig, dass auf Module folgendermaßen verwiesen wird:

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

Ich habe viel gesucht, einschließlichHier-http://httpd.apache.org/docs/2.4/mod/core.html#ifmoduleund ich kann nicht herausfinden, worin der Unterschied besteht und wann das eine dem anderen vorzuziehen ist?


Nehmen Sie zum Beispiel das Rewrite-Modul

Vom ApacheDokumentation: ifmodule-Direktive

Das Modulargument kann entweder die Modulkennung oder der Dateiname des Moduls zum Zeitpunkt der Kompilierung sein.
Beispielsweise ist rewrite_module die Kennung und mod_rewrite.c der Dateiname.

.htaccessUnd es ist sehr üblich, dies in Dateien zu sehen

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

Ich grephabe mein /etc/apache2Verzeichnis überprüft und „mod_rewrite.c“ ist nirgendwo definiert.

Auf meinem Rechner /etc/apache2/mods-available/rewrite.load
enthält die Datei:

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

handelt es sich also um mod_rewrite.ceinen Verweis auf eine Windows-/andere Datei? In diesem Fall wäre ein Verweis darauf auf einem Linux-Computer eine falsche Syntax?

Antwort1

Auf der Seiteverknüpftan, es enthält diesen Text:

Das Modulargument kann entweder die Modulkennung oder der Dateiname des Moduls zum Zeitpunkt der Kompilierung sein. Beispielsweise ist rewrite_module die Kennung und mod_rewrite.c der Dateiname. Wenn ein Modul aus mehreren Quelldateien besteht, verwenden Sie den Namen der Datei, die die Zeichenfolge STANDARD20_MODULE_STUFF enthält.

Im angegebenen Beispiel kann das Rewrite-Modul entweder als „rewrite_module“ (Bezeichner) oder als „mod_rewrite.c“ (Dateiname) bezeichnet werden. Beide sind gleichwertig und es gibt keinen Unterschied. Sie können beides verwenden.

Das Modul mit der Quelldatei mod_rewrite.c wird in mod_rewrite.so kompiliert, was Sie dann auf Ihrem Dateisystem haben. Diese Quelldatei enthält die Zeile „module AP_MODULE_DECLARE_DATA rewrite_module;“, die ein Modul namens „rewrite_module“ deklariert.

Auf das Modul kann entweder als „rewrite_module“ (Bezeichner) oder als „mod_rewrite.c“ (Quelldatei, aus der es kompiliert wurde) verwiesen werden.

Die Zeile „LoadModule“ weist an, das Modul mit der Kennung „rewrite_module“ aus dem bereits kompilierten Objekt mod_rewrite.so zu laden. Wenn Sie dies konfigurieren, können Sie entweder auf die Kennung oder den Quelldateinamen verweisen, wenn Sie ihn kennen.

Antwort2

Wie @DanielLawson bereits angemerkt hat, ist dies auf der Apache-Handbuchseite, auf die Sie verweisen, klar beschrieben.

Das Modulargument kann entweder die Modulkennung oder der Dateiname des Moduls zum Zeitpunkt der Kompilierung sein.

Der Dateiname des Moduls endet mit einem.CErweiterung, da C die Sprache ist, in der Apache httpd entwickelt wird.

Das Konzept der Modulkennungen ähnelt wiederum den Tags von Stack Exchange. Ihr <IfModule mpm_prefork_module>Block lautet: Wenn Sie ein Modul haben, das alsmpm_prefork_module. Dies ermöglicht eine bessere Flexibilität bei der Konfiguration - verschiedene Module bieten die gleiche Funktionalität, wiemod_ssl.cUndmod_gnutls.cbeide habenSSL-ModulKennung.

verwandte Informationen