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.

In diesem Format haben die Redriects dann functioniert

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.