htaccess redirects automatisch generieren per Macro
Problem
Letztens wollte ich redirects für eine Seite erstellen, bei welcher die alten URLs ein solches Format hatten:
domain/?page_id=121
Eine einfaches redirect im htaccess file hat da nicht funktioniert. Dieses würde wie folgt aussehen:
Redirect 301 /?page_id=5340 domain/subpage/
Weshalb das nicht funktioniert hat, ist mir bis heute noch unklar.
Lösung
Stattdessen habe ich dann folgendes Format verwendet:
RewriteEngine On
RewriteCond %{QUERY_STRING} ^page_id=61$
RewriteRule ^(.*)$ domain/standorte/rothrist-hauptgeschaeft/? [R=301,L]
Im Code sah das dann wie folgt aus in der .htaccess Datei.
Den Code automatisch erstellen lassen
Weil ich über 50 Links redirecten wollte habe ich für das Problem ein Macro geschrieben. Als input gebe ich eine Excel-Tabelle. In der ersten Spalte die alte URL und in der zweiten Spalte die neue URL. Den Code erhalte ich dann in einem .txt-File ausgegeben in den selben Ordner wie mein Excel.
Achtung: [domain] ersetzen (darauf achten, ob man mit oder ohen www kopiert, dann dementsprechende domain ohne www einsetzen.
Sub GenerateHtaccessFile()
Dim oldLink As String
Dim newLink As String
Dim htaccessCode As String
Dim fileName As String
Dim currentDate As String
currentDate = Format(Now, "yyyy-mm-dd-hh-mm-ss")
htaccessCode = "RewriteEngine On" & vbNewLine
fileName = ThisWorkbook.Path & "\htaccess_" & currentDate & ".txt"
For i = 1 To Cells(Rows.Count, 1).End(xlUp).Row
oldLink = Replace(Cells(i, 1).Value, "http://[domain]/?", "")
oldLink = Replace(oldLink, "https://[domain]/?", "")
newLink = Cells(i, 2).Value
htaccessCode = htaccessCode & "RewriteCond %{QUERY_STRING} ^" & oldLink & "$" & vbNewLine & "RewriteRule ^(.*)$ " & newLink & "? [R=301,L]" & vbNewLine & vbNewLine
Next i
Open fileName For Output As #1
Print #1, htaccessCode
Close #1
MsgBox "The htaccess code has been saved to " & fileName
End Sub
Den so erhaltenen Code kann man dann einfach unten in seine .htaccess-Datei einfügen.