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.
.htaccess
Und es ist sehr üblich, dies in Dateien zu sehen
<IfModule mod_rewrite.c>
# ....
</IfModule>
Ich grep
habe mein /etc/apache2
Verzeichnis ü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.c
einen 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.