Möglich, die Administrator-URL hinter dem Proxy-Problem zu beheben, ohne den Kern zu hacken?


7

In einer früheren Frage habe ich versucht, ein Problem zu lösen, bei dem WordPress die falsche URL in sortierbaren Spaltenüberschriften und Paginierungen im Administrator hinter einem Proxy verwendete. Die einzige Lösung, die funktionierte, bestand darin, Kerndateien speziell zu ändern

Ersetzen Sie diese Zeile in den Zeilen 491 und 658 in wp-admin / includes / class-wp-list-table.php

$current_url = ( is_ssl() ? 'https://' : 'http://' ) . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];

mit

if(!empty($_SERVER['HTTP_X_FORWARDED_HOST'])) {
    $hostname = $_SERVER['HTTP_X_FORWARDED_HOST'];
} else {
    $hostname = $_SERVER['HTTP_HOST'];
}
$current_url = ( is_ssl() ? 'https://' : 'http://' ) . $hostname . $_SERVER['REQUEST_URI'];

Weiß jemand, wie man das macht, ohne den Kern zu modifizieren?

Antworten:


14

Ich warf diese Frage auf Twitter herum und bat einige andere Kernentwickler um Feedback. Mein Bauchgefühl war es, $current_urlentweder filterbar zu machen oder durch eine Funktion erzeugt zu werden, die überschrieben werden konnte. Dies ist anscheinend der falsche Weg.

@markoheijnen :
@EricMann Das Zurücksetzen$_SERVER['HTTP_HOST']klingt nach einer hackigen Lösung. Der gleiche Code kann sich dann in der Datei wp-config.php befinden

@Nacin :
@EricMann @markoheijnen Das Einfügen in wp-config ist korrekt. Es ist nicht die Aufgabe von WP, Reverse-Proxy-Situationen zu behandeln.

@EricMann @markoheijnen Idealerweise sollten sie richtig eingestellt werden, bevor WP (oder sogar PHP) geladen wird. wp-config ist die Alternative.

@markoheijnen :
@nacin @ericmann In diesem Fall ist der Server / Proxy falsch konfiguriert. So kann ich sehen, warum es dann in wp-config behoben werden sollte

Aus den Klängen dieser Konvertierung haben Sie zwei Möglichkeiten:

  1. Konfigurieren Sie Ihren Proxy neu, um die richtigen Hostwerte festzulegen, bevor es überhaupt zu PHP / WP kommt.
  2. Manuell bereinigen und $_SERVER['HTTP_HOST']in Ihrer wp-config.phpDatei einrichten .

Ich habe ein bisschen mehr darüber nachgedacht, und hier ist ein tatsächlicher Code, den Sie wp-config.phpzum Einrichten hinzufügen können (basierend auf dem Hacky-Patch, der die Kerndateien ändert):

if ( ! empty( $_SERVER['HTTP_X_FORWARDED_HOST'] ) ) {
    $_SERVER['HTTP_HOST'] = $_SERVER['HTTP_X_FORWARDED_HOST'];
}

Dies sollte die Dinge so einrichten, dass die Standard-Kerndateien keine Änderungen benötigen, um richtig zu funktionieren. Beachten Sie jedoch, dass ich dies nicht testen kann, da ich keine Proxy-Einrichtung habe, anhand derer ich es überprüfen kann. Wenn dieser Code Ihre Situation nicht behebt, melden Sie sich bitte zurück, und wir können etwas anderes ausprobieren.


1
Siehe auch dies, was helfen könnte: wolfgang.reutz.at/2009/06/12/…
Otto

1
@EAMann Ihr obiger Code-Vorschlag scheint zu funktionieren. Ich werde ihn vorerst verwenden. Glücklicherweise versucht unsere IT-Abteilung, ihn auf dem Server zu reparieren, damit ich nichts tun muss, um ihn auf meiner Seite zu reparieren. Danke
Chuck

1

Ich hatte das gleiche Problem. Wir haben Apache als Proxy verwendet (ProxyPass & ProxyPassReverse definiert) und das einfache Hinzufügen der folgenden Elemente zum virtuellen Host hat das Problem behoben:

Zum virtuellen Host hinzufügen:

ProxyPreserveHost ein


0

Verwenden von Apache httpd v2.4 Ich verwende Folgendes, um / wp-admin unter einer privaten Apache-Instanz ohne Änderung von Code oder Ergänzungen zu wp-config.php zu betreiben.

Hinweis: Ich musste das Beispiel zu sehr verschleiern, um am Filter vorbeizukommen. Hoffentlich reichen die Schlüsselwörter aus, um Ihnen den Einstieg zu erleichtern.

RequestHeader set Host yourdomain Header bearbeiten * Location ^ yourdomain privatedomain

SetOutputFilter Sed OutputSed "s # yourdomain / # / # g"

Meine öffentliche Apache-Instanz verweigert den Zugriff auf / wp-admin.


Bitte stellen Sie eine neue Frage . Wir arbeiten nicht wie ein Forum, lesen Sie diese kleine Anleitung: Über .
brasofilo
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.