Mixed Content Warnungen auf einer HTTPS-Site
Die Seite kam über HTTPS an und bat dann um etwas über HTTP. Browser blockieren die aktiven Teile und lassen das Vorhängeschloss für den Rest fallen.
Mixed Content: The page at 'https://example.com/' was loaded over HTTPS, but requested an insecure resource 'http://example.com/…'.
Die Browserkonsole nennt die genauen beleidigenden URLs — beginnen Sie dort, nicht mit einem Plugin. Die meisten von ihnen sind absolute http://-Links, die von einem Editor in Post-Inhalten gespeichert wurden, der sie vor der Zertifikatsvorlage gespeichert hat, und die dauerhafte Korrektur ist ein Suchersatz in der Datenbank und nicht ein Filter, der die Ausgabe für immer neu schreibt.
Die wahrscheinlichsten Ursachen zuerst.
Gehen Sie die Liste der Reihe nach durch. Prüfen Sie jede Ursache, bevor Sie etwas ändern, da die Lösungen unterschiedlich sind und eine Vermutung mehr Zeit kostet als ein Befehl.
| Ursache | So prüfen Sie es | Lösung |
|---|---|---|
| http:// URLs, die in Post-Inhalten gespeichert sind | Die Seite Quelle ansehen und nach "http://" suchen, gefolgt von Ihrer eigenen Domain. | Führen Sie einen Datenbanksuchersatz über die Inhaltstabellen aus. Tun Sie dies mit einem Tool, das serialisierte Daten versteht, weil Widget- und Metawerte brechen, wenn die Zeichenfolge naiv bearbeitet wird. |
| siteurl und home sagen immer noch http | Wenn beide Optionen mit http://, beginnen, erstellt WordPress seine eigenen Asset-URLs daraus und jede Seite erbt das Problem. | Aktualisieren Sie beide Optionen auf das https:// Formular. Alles, was WordPress generiert – Skripte, Stile, kanonische Tags – wird aus diesen beiden Werten abgeleitet. |
| WordPress kann nicht sagen, dass es hinter TLS steht | is_ssl() gibt false auf einer Site zurück, die über HTTPS eindeutig bedient wird. Dies ist die Signatur einer Reverse-Proxy-Termination, die TLS Upstream beendet. | Vertrauen Sie dem weitergeleiteten Protokoll-Header, bevor WordPress lädt, also antwortet is_ssl() korrekt. Ohne ihn erzeugt WordPress weiterhin http:// Links, egal was die Datenbank sagt. |
| Ein Hardcoded Third Party Asset | Die blockierte URL befindet sich auf der Domain eines anderen – einer Schriftart, einem Skript, einem eingebetteten Player – mit einem expliziten http://Schema. | Ändern Sie es in https:// im Theme oder im embed. Wenn der Remote-Host kein Zertifikat hat, muss das Asset selbst gehostet oder abgelegt werden; es gibt keine Möglichkeit, es sicher zu laden. |
Schritt für Schritt zur Lösung.
Die Befehle setzen WP-CLI und Shell-Zugriff voraus. Jeder Schritt erklärt, was er tut, damit Sie ihn bei Bedarf im Dashboard oder per SFTP ausführen können.
Holen Sie sich die Liste aus dem Browser, nicht aus einer Vermutung
Öffnen Sie die Konsole auf einer fehlerhaften Seite. Jeder Mixed-Content-Eintrag benennt die Ressource, und das Muster über sie identifiziert normalerweise sofort die Quelle.
Überprüfen Sie, was WordPress denkt, dass seine eigene Adresse ist
Diese beiden Optionen befinden sich unter allem anderen, so dass sie es wert sind, bestätigt zu werden, bevor Sie Inhalte ändern.
wp option get siteurl wp option get home
Speicherte URLs sicher umschreiben
Das Überspringen der GUID-Spalte ist absichtlich: Es ist eine Kennung, kein Link, und das Ändern von ihr benachrichtigt Feed-Reader erneut.
wp search-replace 'http://example.com' 'https://example.com' --skip-columns=guid --dry-run wp search-replace 'http://example.com' 'https://example.com' --skip-columns=guid
Teach WordPress – es steckt hinter TLS
Fügen Sie diese oberhalb der Zeile "Bearbeiten stoppen" in wp-config.php hinzu, wenn ein Proxy das Zertifikat beendet.
if ( ! empty( $_SERVER['HTTP_X_FORWARDED_PROTO'] ) && $_SERVER['HTTP_X_FORWARDED_PROTO'] === 'https' ) { $_SERVER['HTTPS'] = 'on'; }Spülung und erneute Überprüfung
Das zwischengespeicherte HTML enthält die alten URLs. Löschen Sie es, laden Sie es dann mit geöffneter Konsole neu und bestätigen Sie, dass die Liste leer ist.
wp cache flush
Darum kümmert sich die Plattform.
TLS endet am Proxy und die nginx der Site übergibt das weitergeleitete Protokoll an PHP, so dass is_ssl() korrekt ist, ohne eine wp-config.php-Bearbeitung und WordPress generiert https:// links von der ersten Anforderung. Zertifikate werden automatisch ausgestellt und erneuert, was die Situation beseitigt, aus der dieser Fehler normalerweise herauswächst: eine Site, die monatelang auf http lief und absolute Links akkumulierte.
Häufige Fragen.
Kann ich einfach ein Plugin verwenden, das URLs am Ausgang neu schreibt?
Warum ist nur ein Bild kaputt, wenn alles andere in Ordnung ist?
Das Vorhängeschloss ist da, aber die Konsole beschwert sich immer noch.
Muss ich auch http zu https umleiten?
War es keiner davon?
Diese Fehler können im Browser ähnlich aussehen.