Redirect rule in .htaccess
droomdre
- htaccess
- regex
Hi folks,
meine alte Seite hat urls in der Art www.domain.tld/test_abc_1234.html Die neue Seite mit Typo3 hat Urls der Art www.domain.tld/abc.html
Ich möchte gern eine Rule erstellen, um die Zuordnung zu mappen. Ich hatte gedacht, ich schreibe in der neuen DB die ID am Ende der alten URL (1234) in einer Seiten-Spalte und in .htaccess rufe ich immer einer Seite auf, die die DB aufruft und einen Vergleich durchführt, um mir die richtige Datei auszugeben.
Also der Aufruf www.domain.tld/test_abc_1234.html wird in der .htaccess zu www.domain.tld/redirect.php?id=1234 weitergeleitet und die Seite redirect.php sucht in der neuen DB, welche Seite in der entsprechenden Spalte "1234" hat und gibt diese zurück.
Ist mein Verfahren kompliziert und best practice oder gibt es eine andere Möglichkeit, um mein Vorhaben zu erreichen.
Vielen Dank.
Ist mein Verfahren kompliziert
Zu kompliziert.
Du kannst Deine redirect.php auch als ErrorDocument 404 registrieren und dann die URL untersuchen. Auf die neue Seite weiterleiten, sonst eine Hilfestellung (Suche, eventuell schon mit Ergebnissen) anbieten.
und best practice
Kommt darauf an, was Du noch falsch oder richtig machst. Aus SEO-Sicht sind korrekte Header (301, 302, 303, 404) wichtig.
Die neue Seite mit Typo3
Du kannst Deine redirect.php auch in Typo 3 als ErrorDocument 404 registrieren.
meine alte Seite hat urls in der Art www.domain.tld/test_abc_1234.html Die neue Seite mit Typo3 hat Urls der Art www.domain.tld/abc.html
Sofern der Teil abc aus der alten in die neue URL übernommen wird, kannst du das ganz einfach mit RedirectMatch erledigen, siehe https://httpd.apache.org/docs/2.4/mod/mod_alias.html#redirectmatch
Ich hatte gedacht, ich schreibe in der neuen DB die ID am Ende der alten URL (1234) in einer Seiten-Spalte und in .htaccess rufe ich immer einer Seite auf, die die DB aufruft und einen Vergleich durchführt, um mir die richtige Datei auszugeben.
Kann man machen, ist aber noch etwas kompliziert. Der Apache hat eine Datenbankfunktion eingebaut: RewriteMap, siehe https://httpd.apache.org/docs/2.4/mod/mod_rewrite.html#rewritemap
Das könnte dann in ungefähr so aussehen (teils aus der Anleitung kopiert, nur das Muster an deine Pfade angepasst):
RewriteEngine on
RewriteBase /
RewriteMap examplemap "txt:/path/to/file/map.txt"
RewriteRule ".+_(\d+)\.html$" "${examplemap:$1}"
Ist mein Verfahren kompliziert und best practice
Wenn etwas kompliziert ist, ist es in aller Regel nicht die beste Lösung.