Ich möchte meine Erfahrungen mit der Übersetzung von Apache 2.4 in PCRE2 teilen, da sogar PHP 7 die PCRE2-Bibliothek seit langem unterstützt und die Open Source Apache Software Foundation immer noch nicht vorhanden ist.
Natürlich bin ich jetzt wahrscheinlich der Veröffentlichung von Apache mit PCRE2-Unterstützung voraus, da ich die Quellen von Apache Geo verwende, aus denen hervorgeht, dass die PCRE2-Unterstützung bereits in der nächsten Veröffentlichung möglich ist, aber für diejenigen, die bereits PCRE2-Unterstützung in Apache 2.4 wünschen und nicht warten möchten Release Sharing eine der Möglichkeiten.
In dem Artikel wird davon ausgegangen, dass Sie die gesamte erforderliche Software aus der Quelle, eine Liste der Software und Versionen zum Zeitpunkt des Schreibens sammeln:
PCRE2-10.33
APR 1.7.0
APR-util 1.6.1
Apache httpd 2.4.41Erster Schritt: Erstellen und Kompilieren von PCRE2
Wir werden den Moment des Herunterladens der Quelle aus den Quellen weglassen, da dies zu offensichtlich ist. Sie haben das Archiv entpackt, gehen zum Quellordner PCRE2 und führen den folgenden Befehl aus, um UTF zu unterstützen:
./configure --prefix=/etc/webserver/pcre2-1033 --enable-pcre2-8 --enable-pcre2-16 --enable-pcre2-32 --enable-unicode
Geben Sie im Präfix Ihren Pfad an, wenn Sie den Standardspeicherort für die Installation der Bibliothek nicht verwenden möchten:
--prefix=///
Andernfalls sammeln Sie ohne Präfix.
Die verbleibenden Befehle zeigen die Aufnahme von unterstützenden 8-Bit-, 16-Bit- und 32-Bit-Codeblöcken PCRE an. In dieser Ausführungsform wurde die Montage mit ihnen durchgeführt.
Und natürlich kompilieren wir diesen Fall mit der sequentiellen Ausführung von Befehlen:
make make install
Wenn alle Regeln und die Kompilierung reibungslos verlaufen sind, fahren Sie mit dem nächsten Schritt fort.
Schritt zwei: Verbinden Sie die PCRE2-Bibliothek mit dem APR
Da Apache die Quellen mit APR kompiliert, müssen wir die Bibliothek im APR selbst verbinden, da es sonst zu Fehlern bei unbekannten Funktionen in den Apache-Quellen kommen kann, da wir die neuen PCRE2-Funktionen verwenden.
Wir lassen den Moment des Herunterladens der Quelle aus den Quellen aus, da dies zu offensichtlich ist. Daher haben Sie das Archiv entpackt und den APR konfiguriert:
./configure --prefix=/etc/webserver/apr-170
Geben Sie Ihren Pfad natürlich im Präfix an, wenn Sie den Standardspeicherort für die Installation der Bibliothek nicht verwenden möchten oder nicht angeben:
--prefix=///
Wechseln Sie nach Abschluss der Konfiguration in das Verzeichnis: /etc/webserver/srcsrv/apr-1.7.0/build
Nun, oder: / Ihr / Pfad / zur Bibliothek / Build
Suchen Sie die Datei apr_rules.mk in diesem Verzeichnis und fügen Sie am Ende der Zeile Folgendes hinzu:
EXTRA_LIBS=-lrt -lcrypt -lpthread -ldl
Bibliotheksanbindung:
-lpcre2-8 -L/// pcre2/lib
Speichern Sie, gehen Sie zum Stammverzeichnis der APR-Quellen: / your / path / zur Bibliothek.
Kompilieren Sie unseren modifizierten APR:
make make install
Wenn alle Regeln und Kompilierungen reibungslos verlaufen sind, fahren Sie mit dem nächsten Schritt fort.
Dritter Schritt: APR-util für Apache aus dem Quellcode erstellen
Sie haben diese Bibliothek aus dem Büro der Quelle heruntergeladen, gehen mit APR-util in den Stammordner des entpackten Archivs und geben die folgenden Befehle nacheinander ein:
./configure --prefix=/etc/webserver/apr-util-161 --with-apr=/// apr make make install
Geben Sie natürlich Ihren Pfad im Präfix an, wenn Sie den Standardspeicherort für die Installation der Bibliothek nicht verwenden möchten, oder geben Sie Folgendes nicht an:
--prefix=///
Auch hier verbinden wir unseren APR:
--with-apr=/// apr
Schritt 4: Laden Sie Quellen von Apache Git herunter, um PCRE2 zu unterstützen
Wichtig: Laden Sie die Quelle von der neuesten Version der Gita herunter.
Wir müssen zwei Quellen wie ap_regex.h und util_pcre.c herunterladen, die folgenden Links:
ap_regex.hutil_pcre.cJetzt gehen wir zu unserem Apache httpd-Quellverzeichnis und erstellen Apache mit den folgenden Befehlen:
./configure --prefix=/etc/webserver/apache-2441 --with-apr=/// apr --with-apr-util=/// apr-util --with-pcre=/// pcre2/bin/pcre2-config
Geben Sie Ihren Pfad natürlich im Präfix an, wenn Sie den Standardspeicherort für die Installation der Bibliothek nicht verwenden möchten oder nicht angeben:
--prefix=/// Apache httpd
Geben Sie außerdem nach eigenem Ermessen zusätzliche Befehle zum Erstellen von Apache an. Ich meine die Befehle zum Deaktivieren von Modulen und Bibliotheken.
Als nächstes gehen Sie zu Ihrem Apache httpd-Quellverzeichnis. Ich habe Folgendes:
/etc/webserver/srcsrv/httpd-2.4.41
Du gehst natürlich in dein Verzeichnis, ersetze es im Verzeichnis:
/etc/webserver/srcsrv/httpd-2.4.41/include
Die Datei ap_regex.h, die wir vom Apache-Git heruntergeladen haben.
Gehen Sie auch in das Verzeichnis:
/etc/webserver/srcsrv/httpd-2.4.41/server
Ersetzen Sie die Datei util_pcre.c durch den Apache, von dem wir heruntergeladen haben
Jetzt muss noch die PCRE2-Verbindung in Apache selbst hinzugefügt werden. Sie müssen die Datei ap_config_auto.h suchen, sie befindet sich im Verzeichnis:
/etc/webserver/srcsrv/httpd-2.4.41/include
Fügen Sie ganz am Anfang dieser Datei die folgenden Zeilen ein:
#define HAVE_PCRE2 1
Nun sind wir bereit für den Moment, in dem Apache httpd mit PCRE2-Unterstützung kompiliert wird.
Wir gehen in unser Apache httpd Quellverzeichnis und kompilieren diesen Fall mit der sequentiellen Ausführung von Befehlen:
make make install
Wenn nun alles gut und fehlerfrei gelaufen ist, haben Sie Apache httpd mit PCRE2-Unterstützung zusammengestellt und kompiliert, was positive Änderungen in Apache-Modulen mit regulären PCRE-Ausdrücken bedeutet, darunter Module rewrite.
Zusammenfassend lässt sich sagen, dass diese Methode die Verwendung von PCRE2 vor der Veröffentlichung von Apache Software Foundation ermöglicht. Ich hoffe, dass bald eine Version mit PCRE2-Unterstützung veröffentlicht wird.
Außerdem sind beim Testen von Standard .htaccess keine Fehler aufgetreten, wenn jemand Fehler in die Kommentare geschrieben hat.
PS
Die Situation, zwei verschiedene Versionen von PCRE für meinen Stack zu verwenden, hat mich ein wenig gestört, und ich habe beschlossen, das Problem zu beheben.