Zur Navigation

RewriteRule, um den letzten Ordner mit der Datei zu verbinden

1 Robs

Hallo,

um 404-Fehlermeldungen durch einige externe Links (auf die ich keinen Einfluß habe) zu vermeiden, möchte ich gerne eine RewriteRule verwenden, die aus

ALT
...irgendwas.../LetzterOrdner/Nr-3.pdf

NEU
...irgendwas.../LetzterOrdner--Nr-3.pdf

macht. Der letzte Ordner soll also Teil des Dateinamens werden bzw. aus dem Slash werden 2 Bindestriche, wobei die 3 auch eine 4 sein kann.

Würde mich über Tipps freuen - bei mir hapert's spätestens dann, wenn Variable ins Spiel kommen... Danke im Voraus!

Gruß
Robs

25.11.2014 10:48

2 Jörg Kruse

Also nur die Nummer ist variabel?

So in etwa würde ich's dann probieren:

RewriteEngine on
RewriteRule ^(.+)/(LetzterOrdner)/Nr-([0-9]+).pdf$ http://%{HTTP_HOST}/$1/$2--Nr-$3.pdf [L,301]

25.11.2014 15:23

3 Robs

Zitat von Jörg
Also nur die Nummer ist variabel?

So in etwa würde ich's dann probieren:

RewriteEngine on
RewriteRule ^(.+)/(LetzterOrdner)/Nr-([0-9]+).pdf$ http://%{HTTP_HOST}/$1/$2--Nr-$3.pdf [L,301]

Danke für die schnelle Reaktion! Der "LetzteOrdner" ist quasi auch variabel, zumindest gäbe es dort 2 Varianten, geht das auch noch? Falls nicht, kein Problem, dann könnte ich ja 2 RewriteRules einbauen.

Dieses ^(.+) ist mir ein Rätsel... heißt das "alles" was davor kommt ohne Host? Also egal, ob das ein oder mehrere Verzeichnisse sind?

Danke :-)

Update: Ich tüftel gerade herum und bekomme einen Serverfehler 500 - kann es sein, dass da [L,R=301] anstatt [L,301] stehen muss? Zumindest habe ich das so bei einer anderen RewriteRule wegen der Umleitung auf "www."...

25.11.2014 16:39 | geändert: 25.11.2014 16:53

4 Jörg Kruse

Einen variablen Ordnernamen kannst du durch ein [^/]+ ausdrücken:

RewriteRule ^(.+)/([^/]+)/Nr-([0-9]+).pdf$ http://%{HTTP_HOST}/$1/$2--Nr-$3.pdf [L,R=301]

[^/] umfasst alle Zeichen außer "/" (das "^" ist innerhalb von [] ein Negationszeichen)
. steht für (ein) beliebige(s) Zeichen (also auch "/")
+ dahinter bedeutet ein oder mehr von diesen Zeichen

^ und $ markieren Anfang und Ende des Strings - davor und danach kann es also keine weiteren Zeichen geben

Die Ausdrücke innerhalb der runden Klammern werden auf der rechten Seite wieder als $1, $2, $3 aufgenommen

Edit:

kann es sein, dass da [L,R=301] anstatt [L,301] stehen muss

Ja, das fehlte noch das R=

25.11.2014 16:56 | geändert: 25.11.2014 16:59

1 Forenmitglied fand diesen Beitrag gut

5 Robs

Die Infos zur Syntax sind sehr hilfreich - jetzt ergibt das Ganze auch Sinn!!! ;-)
Mir ist es sogar gelungen, die Zeile zu vereinfachen und eine Variable zu kürzen:

RewriteRule ^(.+)/Nr-([0-9]+).pdf$ http://%{HTTP_HOST}/$1--Nr-$2.pdf [L,R=301]

Ich lade das morgen hoch, wenn es ruhiger auf der Seite ist. Das es bei mir unter localhost nicht funktioniert, liegt sicher daran, dass für Apache der Speicherort der .htaccess Datei entscheidend ist, denn die Verzeichnisse darüber werden von der Variablen $1 nicht mehr erfasst, macht aber nichts.

Ist schon Klasse, welche Möglichkeiten in so wenig Code stecken... quasi ein Fluxkompensator, wenn man weiß wie ;-)

Ich melde mich dann morgen noch mal und berichte, ob es wie geplant läuft. Danke und schönen Abend noch!

Robs

25.11.2014 18:05

6 Robs

Es läuft wie geschmiert :-) Danke Jörg!!!

Gruß
Robs

26.11.2014 11:00

Beitrag schreiben (als Gast)

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





[BBCode-Hilfe]