it-swarm.com.de

Wordpress get_template_directory_uri () gibt http statt https zurück

Wir haben kürzlich ein SSL-Zertifikat auf unserer Website angewendet und wir möchten, dass alle unsere URLs das Protokoll https: // haben. 

Nachdem wir unsere Website auf https: // verschoben hatten, brach unsere Website zusammen, da nur wenige Ressourcen auf http: // verweisen. Nachdem ich eine Weile recherchiert hatte, sah ich, dass get_template_directory_uri () immer http: // zurückgibt, auch wenn es durch unser wp_home geht, wp_site_url ist mit https: // gesetzt.

Gibt es einen anderen Ort, an dem wir die URL ändern müssen, da wir ein untergeordnetes Design verwenden und diese Funktion das übergeordnete Designverzeichnis erhält.

Danke, Raju Vishwas

12
Raju Vishwas

Überprüfen Sie den $_SERVER['HTTPS']-Wert. Dies sollte auf on oder 1 gesetzt werden. Wenn während der Einstellung ein anderer Wert festgelegt ist, gibt diese Funktion anstelle von https http aus.

Siehe: https://core.trac.wordpress.org/browser/tags/4.5.3/src/wp-includes/functions.php#L4025

8
pbond

anmerkungen des Links anzeigen https://codex.wordpress.org/Function_Reference/is_ssl

if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https')
$_SERVER['HTTPS'] = 'on';
2
Roberto Poblete

Durch diesen Kommentar fügte der Initiator hinzu:

in meinem Fall verwendeten wir den Load Balancer-Server und das SSL-Zertifikat wurde auf Load Balancer installiert

Die Antwort von @pbond zerkratzt die Oberfläche an der Ursache des Problems. . Die Funktion WordPress is_ssl() prüft $ _SERVER ['HTTPS'] und $ _SERVER ['SERVER_PORT'], um zu prüfen, ob auf die aktuelle Seite über https zugegriffen wird, der Load Balancer jedoch höchstwahrscheinlich Ihren Inhalt auf dem Nicht-SSL-Server anfordert Port 80.

Eine gute Lösung für dieses Problem ist die Verwendung des X-Forwareded-Proto-HTTP-Headers, um herauszufinden, welches Protokoll der Client tatsächlich auf der anderen Seite des Load Balancer verwendet.

Mit Apache 2.2 können Sie dies zu Ihrer Konfiguration hinzufügen:

<IfModule mod_setenvif.c>
  SetEnvIf X-Forwarded-Proto "^https$" HTTPS
</IfModule>

Ein weiterer möglicher Fix (auf @Roberto Poblete angedeutet, aber nicht erklärt) ist das Hinzufügen zu wp-config.php.

if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https')
$_SERVER['HTTPS'] = 'on';

Ich habe dies zu danken , um mich in der richtigen direkt zu schicken

2
kakoma

Haben Sie versucht, die Bereitstellung von Inhalten über https mit einer geänderten .htaccess-Datei zu erzwingen?

unter dem Ausschnitt, den ich verwende:

#Force HTTPS
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_Host}%{REQUEST_URI} [R=301,L]
0
funkysoul

Überprüfen Sie die Liste der installierten Plugins. Jedes Plugin, das Caching, CDNs usw. beinhaltet, kann mit get_template_directory_uri interferieren. In unserem Fall hatte der Kunde eine Menge Plug-Ins installiert, um seine Site zu beschleunigen. 

Wenn keine Plugins aktiviert sind, wird https gut geladen. Es ging also nur darum herauszufinden, um welche es sich handelt. Und in den Einstellungen des beleidigenden Plugins steckte eine http-Version des Site-Pfads.

0
hawbsl