Wie man mit Hilfe von Powershell aus einer Sitemap Datei die URLs für ein 301 Redirect in .htaccess bekommen kann zeige ich hier heute.
Mein Blog wird bald auf eine neue Domain umziehen. Damit alle Links hierher weiterhin erreichbar sind, will ich für alle Artikel im Blog einen 301 Redirect anlegen. Nun sind das aber natürlich schon einige Links, die da zusammengekommen sind und per Hand alle Redirects anlegen wäre blöd. Zum Glück habe ich ja schon eine Datei, in der alle Links stehen – meine Sitemap! Aus der Sitemap wollen die Links aber auch erstmal geholt werden. Man ist ja Programmierer und ich
habe mir schnell ein Script dafür gebastelt.
$input = 'C:UsersWustDownloadssitemap.xml'
$output = 'C:UsersWustDownloadsredirect.txt'
$regex = 'tobiaswust.de/.*</loc>'
Select-string -Path $input -Pattern $regex -AllMatches | %{'Redirect 301 ' + $_.Matches.Value.Replace('</loc>','').Replace('tobiaswust.de','') + ' http://wust.me' + $_.Matches.Value.Replace('</loc>','').Replace('tobiaswust.de','')} > $output
In den Variablen $input und $output sind die Pfade zur sitemap Datei, aus der ich die Pfade auslesen will und zu der Datei, in die mir die Redirects erstellt werden sollen.
In der Variable $Regex habe ich ein Suchmuster, das genau so viel beinhaltet, dass eindeutig das richtige gefunden wird. tobiaswust.de ist klar, “.*” steht für dafür, das ein beliebiges Zeichen (.) beliebig oft (*) vorkommen kann. Damit würde aber unter umständern noch mehr kram hinter der URL stehen. Weil ich weiß, dass in der Sitemap hinter der URL immer </loc> steht habe ich das mit ins Suchmuster reingenommen.
Die nächste Zeile ist etwas unübersichtlich.
Select-String -Path $input -Pattern $regex -AllMatches: Es soll ein String in der Datei $input gesucht werden mit dem Muster $regex. Es gibt mehrere treffer, daher -AllMatches.
|: bedeutet nach diesem Befehl arbeite mit dem nächsten Befehl weiter.
%: ist die kurze Powershell abkürzung für foreach. Weil mit -AllMatches ja mehrere Treffer kommen, loope ich durch diese durch.
‘Redirect 301 ‘: ein String mit dem jede Zeile in meiner neuen Datei anfangen soll, damit ich das später nicht mehr schreiben muss.
$_: Bezeichnet das aktuelle Element aus der % Schleife.
.Matches: $_ ist noch kein Text, sondern ein Objekt, in dem noch ein paar mehr Infos zum Treffer abgelegt sind.
.Value: der Treffertext aus dem Objekt.
.Replace: hiermit schmeiße ich tobiaswust.de/ und </loc> raus, sodass nur der Teil vom Pfad übrig bleibt, den ich für den Redirect brauche.
>: leitet die Ausgabe in eine Datei um.
Danach kommt eigentlich das gleiche noch mal, nur dass die neue Domain vorangehangen wird.
Kürzlich hatte ich beschrieben, wie man Condor Maps auf SD Karte verschieben kann. Jetzt habe…
Ich habe jetzt mein Video zur meiner Reise nach La Reunion auf Youtube gestellt. Das…
Mein Condor Spielmodul Gelegentlich spiele ich ganze gerne den Segelflugsimulator Condor 2 dabei hat mich…
Ich hatte gerade Lust mal wieder alle Folgen von Dragonball zu gucken. Leider gibt es…
Auf der Website vom DHV kann man normalerweise Kostenlos die DHV Info lesen. Das ist…
Ich bin für manche so etwas wie ein digitaler Nomade, ich arbeite mit meinem Laptop…