Zur Navigation

Frage zu .htaccess und bedingten Weiterleitungen

1 Jörn (Gast)

Hallo,
ich betreibe eine provate Homepage bräuchte Hilfe bei der .htaccess Datei. Meine Homepage besteht seit rund 15 Jahren und ich wechsel von b2evolution nach dokuwiki, nachdem ich bei einem Update größere Probleme hatte. Auch war ich mit der Übersichtlichkeit nicht zufrieden.
Bei der Umstellung will ich die Suchmaschinen und die Nutzer, die sich Links gesetzt haben nicht verprellen und versuche alle alten Pfade auf die neuen Pfade umzuleiten. Meine Seite besteht aus rund 50 Seiten mit 120 Dateien. Nur ich stellen Seiten und Dateien ein.

Meine Frage möchte ich exemplarisch für eine Seite mit drei Dateien stellen. Die Fragen habe ich teilweise in den Code hinein geschrieben.

# Diese Weiterleitung funktioniert. Ist sie richtig?
Redirect 302 /alt.php/eagle-tutorial-layout-kopieren https://www.example.org/bastelhilfen/eagle-layout

# Diese beiden Weiterleitungen funktionieren auch. Alles mit dem '?' ist nicht wichtig und hat keine Bewandtnis. Sind sie richtig? Oder sollte das mit dem '?' anders gehandelt werden?
Redirect 302 /media/blogs/dk7jb/Software/eagle_layout_kopieren_v001.pdf https://www.example.org/_media/bastelhilfen/eagle_layout_kopieren.pdf
Redirect 302 /media/blogs/dk7jb/Software/eagle_layout_kopieren_v001.pdf?mtime=1608324661 https://www.example.org/_media/bastelhilfen/eagle_layout_kopieren.pdf

# Hier nun ein Problem. Beim ?download= soll die zugehörige Zahl über den neuen Pfad entscheiden.
Redirect 302 /alt.php/eagle-tutorial-layout-kopieren?download=56 https://www.example.org/_media/bastelhilfen/dokument1.pdf?
Redirect 302 /alt.php/eagle-tutorial-layout-kopieren?download=57 https://www.example.org/_media/bastelhilfen/dokument2.pdf?
# Möglich sind auch andere Zahlen beim Parameter, die dann auf eine anderen Pfad verweisen sollen.

Wie würde ihr meine Problem lösen?

Ich gehe davon aus, dass ich dass dann für alle Seiten und Dateien wiederholen darf, da alle neu angeordent worden ist.

01.01.2021 13:14

2 Jörg Kruse

Für eine Auswertung des Query Strings (Teil der URL, welcher mit dem ? beginnt) würde ich mit mod_rewrite weiterleiten:

RewriteEngine on

RewriteCond %{QUERY_STRING} download=56
RewriteRule ^alt\.php/eagle-tutorial-layout-kopieren$ https://www.example.org/_media/bastelhilfen/dokument1.pdf? [R=302,L]

RewriteCond %{QUERY_STRING} download=57
RewriteRule ^alt\.php/eagle-tutorial-layout-kopieren$ https://www.example.org/_media/bastelhilfen/dokument2.pdf? [R=302,L]

# ... und so weiter...

# zuletzt Weierleitung ohne Query String:
RewriteRule ^alt\.php/eagle-tutorial-layout-kopieren$ https://www.example.org/bastelhilfen/eagle-layout [R=302,L]

Fall dauerhaft weitergeleitet werden soll, würde ich den Status Code 301 anstelle von 302 verwenden

01.01.2021 13:40 | geändert: 01.01.2021 13:42

3 Jörn (Gast)

Hallo Jörg,
vielen herzlichen Dank für die superschnelle Hilfe.

Muss ich im zweiten Teil der Anweisung eigentlich immer einen absoluten Pfad angeben oder darf ich auch relativ bleiben?

Also:
Redirect 302 /media/blogs/dk7jb/Software/eagle_layout_kopieren_v001.pdf?mtime=1608324661 https://www.example.org/_media/bastelhilfen/eagle_layout_kopieren.pdf?

oder so
Redirect 302 /media/blogs/dk7jb/Software/eagle_layout_kopieren_v001.pdf?mtime=1608324661 /_media/bastelhilfen/eagle_layout_kopieren.pdf?

Entfernt das Fragezeichen am Ende der Eingabe sicher das ?mtime=1608324661 ?

Wie werden solchen Weiterleitungen eigentlich im professionellen Bereich aufgearbeitet? Ist das dann auch Handarbeit oder erledigt das dann intelligente Software?

01.01.2021 15:16

4 Jörg Kruse

Diese Redirect-Direktive kannst du komplett entfernen:

Redirect 302 /media/blogs/dk7jb/Software/eagle_layout_kopieren_v001.pdf?mtime=1608324661 https://www.example.org/_media/bastelhilfen/eagle_layout_kopieren.pdf

Die Angabe hinter dem 302 wird als Pfad interpretiert und einen Pfad mit einem Query String hinten dran gibt es nicht. Diese Regel bewirkt also gar nichts.

Du kannst das Weiterleitungsziel auch als absoluten Pfad ohne https://www.example.org davor angeben. Ein relativer Pfad, wie z.B. "../../irgendwas", ist nicht zulässig

Wie werden solchen Weiterleitungen eigentlich im professionellen Bereich aufgearbeitet? Ist das dann auch Handarbeit oder erledigt das dann intelligente Software?

Ich würde bei einer großen Anzahl von verschiedenen Weiterleitungen aufgrund verschiedener Parameter die URL auf ein Weiterleitungsscript mappen, z.B.:

RewriteRule ^alt\.php/eagle-tutorial-layout-kopieren$ redirect.php

... und in der redirect.php dann $_SERVER['QUERY_STRING'] auswerten und entsprechend weiterleiten. Das hätte den Vorteil, dass die .htaccess Datei schön schlank und übersichtlich gehalten werden kann

01.01.2021 15:54 | geändert: 01.01.2021 15:58

5 Jörn (Gast)

Hallo Jörg,
du schreibst, dass meine erste Eingabe nicht sinnvoll ist.
Spricht denn etwas gegen die Schreibweise ohne ?mtime=1608324661 und den verwendeten Zielpfad? Es funktioniert jedenfalls auch, wenn das ?mtime=1608324661 fälschlicherweise mit eingegeben wird:
Redirect 302 /media/blogs/dk7jb/Software/eagle_layout_kopieren_v001.pdf /_media/bastelhilfen/eagle_layout_kopieren.pdf
Wie lange würdest du die Angaben in der htaccess Datei lassen? Im Netzt finde ich Angaben von ca. einem Jahr.

01.01.2021 16:20

6 Jörg Kruse

Redirect 302 /media/blogs/dk7jb/Software/eagle_layout_kopieren_v001.pdf /_media/bastelhilfen/eagle_layout_kopieren.pdf

Diese Direktive sorgt dafür, dass auch URLs mit einem Query String hinten dran weitergeleitet werden, also z.B. auch https://www.example.org//media/blogs/dk7jb/Software/eagle_layout_kopieren_v001.pdf?bla=blub

Wie lange würdest du die Angaben in der htaccess Datei lassen?

Solange, wie die weitergeleiteten URLs in (für dich) nicht unerheblichen Maße abgerufen werden. Das könntest du ja nach einem Jahr oder so anhand der Logfiles / Webstatistiken kontrollieren

01.01.2021 16:34

7 Jörn (Gast)

Ich denke, dass ich nun anfangen kann meine Linklisten abzuarbeiten. Nachmals vielen Dank.

01.01.2021 16:39

Beitrag schreiben (als Gast)

Die Antwort wird nach der Überprüfung durch einen Moderator freigeschaltet.





[BBCode-Hilfe]