Wie füge ich eine serverunabhängige externe Umschreiberegel hinzu?

7

Externe Umschreiberegeln sind fantastisch. Mit ihnen können Sie Umschreibungen definieren, die nicht unbedingt über WordPress laufen index.php. Dies bedeutet, dass Sie beliebige Regeln beliebigen Dateien zuordnen können, z.

$wp_rewrite->add_external_rule( '^somethingrandom/?$', 'wp-content/wp-uploads/hiddendirectory/somefile.php' );

Dann, um jede Anfrage http://site.url/somethingrandom/wird tatsächlich eine statische PHP - Datei aus einem anderen Verzeichnis bedient werden. Das ist erstaunlich und ermöglicht es Ihnen, alle möglichen raffinierten Dinge zu erledigen.

Aber es funktioniert nur mit Apache.

Die add_external_rule()Methode schreibt ihre registrierten Regeln an .htaccess. Da Nginx keine .htaccessDatei verwendet, werden externe Regeln von diesem Server vollständig ignoriert. Was ich brauche, ist eine serverunabhängige Möglichkeit, Regeln wie die oben beschriebene programmgesteuert zu registrieren. Irgendwelche Ideen?

EAMann
quelle
1
Es .htaccessscheint eine schlechte Idee zu sein, WordPress das Schreiben in Serverkonfigurationsdateien (auch in ) zu erlauben . Ich denke also nicht, dass add_external_rulees wirklich sinnvoll ist, sich darauf zu verlassen, zumal es vom Webserver abhängt - ich möchte nicht einmal darüber nachdenken, wie man es add_external_rulefür IIS implementieren würde .
Weston Ruter
Es gibt eine Methode, um ISS zu behandeln: github.com/WordPress/WordPress/blob/master/wp-includes/…
Algorithmus

Antworten:

5

Dies setzt auch voraus, dass .htaccess-Dateien in Apache aktiviert sind, das sich fast immer im Shared Hosting befindet, in Unternehmensumgebungen jedoch häufig deaktiviert ist. Eine Möglichkeit, dies zu erreichen, besteht darin, eine eigene Funktion add_external_nginx_rule zu schreiben, die Weiterleitungen in eine Datei schreibt (könnte sogar .htaccess verwenden, obwohl dies verwirrend sein könnte - es sollte sich um eine versteckte Datei handeln, die mit beginnt, egal was passiert), die Sie dann einschließen in Ihrem Nginx Server Block wie

include /var/www/html/sitefolder/.htaccess;

In Ihrer Funktion würden Sie Weiterleitungen im Nginx-Format schreiben, das in vielen Fällen fast dem Apache-Format entspricht. Dies ist wahrscheinlich etwas, das Sie sogar in ein Plugin verwandeln könnten. Es erfordert eine spezielle Konfiguration in Ihrer Nginx-Konfigurationsdatei, aber für die Verwendung von .htaccess in Apache muss diese auch in der Apache-Konfigurationsdatei aktiviert sein, sodass Sie argumentieren können, dass es sich um dasselbe Konzept handelt.

Hinweis: Ich habe nichts davon ausprobiert, sehe aber keinen Grund, warum dies nicht funktionieren würde. Wäre es wert, erkundet zu werden.

Update: Mark ist in den Kommentaren richtig - dies würde nicht funktionieren, da Nginx Konfigurationsdateien nur beim ersten Start oder beim erneuten Laden liest. Daher müssen Sie Nginx bei jeder Änderung neu starten, was diese Lösung aus Sicherheitsgründen problematisch macht.

TheLastCicada
quelle
Es ist unwahrscheinlich, dass dies korrekt ist, da nginx die Regeln nur beim Start liest. Wenn Sie ausdrücklich dazu aufgefordert werden, reicht es nicht aus, die Datei zu ändern. Sie müssen jedoch auch einen Befehl ausgeben, um den Webserver neu zu laden, für den root erforderlich sein sollte Erlaubnis, die dem Webserver selbst fehlen sollte.
Mark Kaplun