webentwicklung-frage-antwort-db.com.de

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

Externe Rewrite-Regeln sind fantastisch. Sie können damit Umschreibungen definieren, die nicht unbedingt über den index.php von WordPress laufen. Dies bedeutet, dass Sie beliebigen Dateien beliebige Regeln zuordnen können, z.

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

Dann wird jede Anfrage an http://site.url/somethingrandom/ tatsächlich einer statischen PHP Datei aus einem anderen Verzeichnis zugestellt. Das ist erstaunlich und ermöglicht es Ihnen, alle möglichen raffinierten Dinge zu erledigen.

Aber es funktioniert nur mit Apache.

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

6
EAMann

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 Redirets in eine Datei schreibt (könnte auch .htaccess verwenden, obwohl dies verwirrend sein könnte - es sollte eine versteckte Datei sein, die mit in Ihrem Nginx-Server blockieren wie

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

In Ihrer Funktion schreiben Sie Umleitungen im Nginx-Format aus, 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 dies auch in der Apache-Konfigurationsdatei aktiviert sein. Sie können also behaupten, dass dies dasselbe Konzept ist.

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

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

4
TheLastCicada