2017-01-10 7 views
0

Ich habe eine Wordpress-Website auf einer AWS EC2-Instanz ausgeführt. Dies wird über einen AWS Elastic Load Balancer bereitgestellt, für den HTTPS mit einem Zertifikat aktiviert wurde, das ich von Amazon erhalten habe.Wordpress get_template_directory_uri() hinter Load Balancer

Die Absicht ist, sowohl eine HTTP- als auch eine HTTPS-Version der Website bereitzustellen. Laden der http-Version funktioniert gut.

Wenn ich die https-Version jedoch lade, erhalte ich Mixed-Content-Fehler, weil get_template_directory_uri() immer http-Links zurückgibt. Die Funktionsweise des Load Balancers ist, dass das TLS am LB endet und über Port 80 mit der tatsächlichen EC2-Instanz kommuniziert. Daher gibt es für die Instanz selbst kein HTTPS.

Eine Menge davon ist jenseits meiner Fähigkeit zu heilen. Ich weiß gerade genug, um herausgefunden zu haben, was das Problem zu sein scheint, aber ich bin mir nicht sicher, was der richtige Weg ist, es zu beheben.

Angenommen, ich möchte immer noch HTTP und HTTPS-Versionen der Seite (es gibt keinen E-Commerce oder Auth auf der Seite - es ist nur informativ), wie soll ich gehen, um dies zu beheben?

FYI, die EC2-Instanz läuft auf einer Amazon ABI, die im Grunde RHEL ist.

Antwort

2

Zunächst einmal werden Sie es schwer finden, sowohl eine HTTP- als auch eine HTTPS-WordPress-Version von denselben Datenbankdaten auszuführen, da WordPress viele Links als absolute Links speichert (dh mit der http (s): // mydomain. com part) und viele Plugins stören sich auch nicht an das aktuelle Protokoll anzupassen.

Ihre beste Wette ist, Umleitungen durch Ihre htaccess-Datei zu tun, um den gesamten HTTP-Verkehr auf https umzuleiten.

aber sagen, dass eine Möglichkeit, die Sie tun können, was Sie gefragt ist durch einen Filter von get_template_directory_uri verwendet:

add_filter('template_directory_uri', 'smart_template_directory_uri', 10, 3); 
function smart_template_directory_uri($template_dir_uri, $template, $theme_root_uri) { 
    return preg_replace('/^https?\:/i', '//', $template_dir_uri); // replace "http://" or "https://" by "//", which browsers will automatically set to the current page's protocol 
} 

hoffe, das hilft!

+0

Danke. Es sieht so aus, als ob der Code, den du gepostet hast, alle Links in "https" -Links umwandelt. Ist das richtig? Also würde die Seite selbst über "http" bedient werden, aber alles, was darin eingebettet ist, würde über "https" bedient werden? –

+0

Doh - Entschuldigung - hat meine Antwort bearbeitet ... Besser? – MacPrawn

+0

Oh, OK, ich verstehe es jetzt. Ist es sicher anzunehmen, dass alle (angenommen wir modernen) Browser '//' in 'http [s]: //'? –

Verwandte Themen