Links ändern in der Datenbank
Diese Möglichkeit ist die Variante für Fortgeschrittene, die in der Lage sind, direkt auf der Datenbank zu operieren. Die absoluten Cracks werden dies von der Kommandozeile des Servers aus machen, Administratoren mit Datenbank-Hintergrundwissen werden sich vielleicht der im Browser zu verwendenden Oberfläche phpMyAdmin bedienen.
Leichter geht es, wenn man sich ein zweckdienliches Plugin installiert: Better Search Replace. Hier kann man die notwendigen Veränderungen innerhalb des WordPress-Backends vornehmen. Vertrauenserweckend ist, dass dieses Plugin von der WordPress-Organisation selbst empfohlen ist.
Gute Erfahrungen haben wir mit dem PHP-Skript Database Search and Replace Script in PHP gemacht. Hier muss man auf dem eigenen Webserver das entsprechende Skript installieren und dann ausführen. Das funktioniert nach eigener Erfahrung sehr gut, bedarf aber einiger „Nachsorgearbeiten“, die in der Dokumentation ausreichend beschrieben sind. Apropos Dokumentation: sie ist hier sehr gut!
Links, die nicht im WordPressdokument vorkommen
In WordPress-Dokumenten gibt es auch Links auf Dokumente, die außerhalb der eigenen Domain – auf anderen Servern als Dateien – gespeichert sind. Diese können natürlich ihrerseits Links auf weitere Dokumente enthalten, die ihrerseits Links… usw.
Um diese Links anzupassen, muss man sich der Kommandozeile des Servers bedienen, denn sie werden durch die vorher beschriebene Datenbankoperation nicht erfasst. Und das sollte als Shell– oder PHP-Skript vorliegen – wenn es keinen Shell-Zugriff auf dem Server gibt. Die (Linux-) Programme find und sed (Stream Editor) sind hier deine Freunde! Folgender Befehl hilft dir weiter, wenn du durch einen ganzen Verzeichnisbaum hindurch alle vorkommenden Zeichenketten, die http:// lauten, durch https:// ersetzen möchtest.
$find . -name "*.html" -exec sed -i 's/http:\/\//https:\/\/g' [] \;
Erklärung:
Finde im augenblicklichen Verzeichnis (.) (rekursiv) alle Dateien, die auf .html enden. Behandle sie wie folgt: ändere alle vorkommenden http:// in https:// und suche in der gesamten Zeile. Die Zeichenkette
's/http:\/\//https:\/\//g'
ist eine Direktive an den Streameditor sed, die in Hochkommata eingeschlossen sein muss. s steht für substitute (ersetzen), der Slash / trennt die Direktive von den Argumenten, die die Änderung/Ersetzung bewirken sollen. Ein Beispiel für eine solche Direktive wäre:
's/ich/du/g'
Diese Direktive bewirkt, dass in dem zu bearbeitenden Dokument alle vorkommenden ich durch du ersetzt würden. Das abschließende g bedeutet, dass alle in einer Zeile vorkommenden ichs ersetzt werden – ohne das g würde nur immer das erste Vorkommen in einer Zeile ersetzt.
In der zuletzt dargestellten Direktive sieht man einige Schräger (slashes): sie trennen die unterschiedlichen Argumente der Substitute-Direktive. Was passiert aber, wenn in der zu ändernden Zeichenkette ein Slash (/) enthalten ist? In diesem Fall werden die Zeichen (z. B. * \ / ~ usw.) durch ein vorangestelltes \ (Backslash) maskiert. Also ist ein https:// maskiert:
's/http:\/\/https:\/\//g'