Zur Navigation

Unterstrich auf Bindestrich leiten

Htaccess, modrewrite, Unterstrich, Bindestrich

1 Mallmis

Schönen Guten Morgen lieber Jörg,

wie das Thema schon sagt möchte ich gerne Unterstriche auf Bindestriche leiten.

Bisher sieht das Ganze so aus:

RewriteCond %{THE_REQUEST} datei\.php

RewriteCond %{QUERY_STRING} ^var1=1&uvar2=2&var3=([\w-]+)$
RewriteRule ^datei\.php$ http://%{HTTP_HOST}/fixer-Text/fixer-Text/%1/? [R=301,L]

RewriteRule ^fixer-Text/fixer-Text/([\w-]+)/?$ datei.php?var1=1&uvar2=2&var3=$1 [QSA]

#alte URL umleiten
RewriteRule ^noch-eine/alte/url/([\w-]+)/?$ http://%{HTTP_HOST}/fixer-Text/fixer-Text/$1/? [R=301,L]

#Unterstrich auf Bindestrich
RewriteRule ^fixer-Text/fixer-Text/([\w-]+)_([\w-]+)([_\w-]+)?([_\w-]+)?(/)?$ http://%{HTTP_HOST}/fixer-Text/fixer-Text/$1-$2(-$3)?(-$4)?\/? [R=301,L]

Macht er mir nicht :-(.

Wo liegt bei mir der Fehler?

Ich danke schon sehr im Voraus,

Gruß,

mallmis

17.07.2014 10:51

2 Mallmis

Hallo nochmal,

ich muss noch dazu sagen das es ein bis drei Unterstriche geben kann.

Gruß,

mallmis

17.07.2014 11:41

3 Jörg Kruse

Als erstes musst du die Reihenfolge der Regeln beachten:

RewriteRule ^fixer-Text/fixer-Text/([\w-]+)/?$ datei.php?var1=1&uvar2=2&var3=$1 [QSA]

Diese Rule matcht bereits auf die URLs mit Unterstrich. Die Weiterleitung weiter unten kommt dann nicht mehr zum Zuge, weil die URL bereits verändert wurde

Zur Reihenfolge siehe auch diese Webnotiz:

https://jkip.de/howtos/mod_rewrite-reihenfolge

Dann ist zu beachten, dass das Weiterleitungsziel kein regulärer Ausdruck ist:

http://%{HTTP_HOST}/fixer-Text/fixer-Text/$1-$2(-$3)?(-$4)?\/?

Variablen (%{HTTP_HOST}, $1, $2 etc.) werden zwar ersetzt. Klammern, Fragezeichen und Backslashes sind dann aber unverändert Bestandteil der URL. Resultat ist dann so eine URL:

http://example.com/fixer-Text/fixer-Text/eins-zwei(-drei)?(-vier)?\/?

Ich würde drei Regeln formulieren, mit jeweils einem, zwei und drei Unterstrichen. Statt \w solltest du dabei eher etwas wie [A-Za-z0-9-] verwenden, damit der Unterstrich nur als Trennzeichen vorkommt, z.B. für die dritte Regel:

^fixer-Text/fixer-Text/([A-Za-z0-9-]+)_([A-Za-z0-9-]+)_([A-Za-z0-9-]+)_([A-Za-z0-9-]+)/?$

17.07.2014 12:59 | geändert: 17.07.2014 13:04

4 Mallmis

Hallo,

vielen dank für die Tipps.

Der fixe Text ist doch nicht so fix und ändert sich auch. So habe ich die Regeln ganz aus dem Konstrukt herausgenommen und dann an den Anfang der Datei gestellt.

So sieht es jetzt aus und klappt wunderbar:

RewriteRule ^([A-Za-z0-9-]+)/([A-Za-z0-9-]+)/([A-Za-z0-9-]+)_([A-Za-z0-9-]+)_([A-Za-z0-9-]+)_([A-Za-z0-9-]+)/?$ http://%{HTTP_HOST}/$1/$2/$3-$4-$5-$6/?
RewriteRule ^([A-Za-z0-9-]+)/([A-Za-z0-9-]+)/([A-Za-z0-9-]+)_([A-Za-z0-9-]+)_([A-Za-z0-9-]+)/?$ http://%{HTTP_HOST}/$1/$2/$3-$4-$5/?
RewriteRule ^([A-Za-z0-9-]+)/([A-Za-z0-9-]+)/([A-Za-z0-9-]+)_([A-Za-z0-9-]+)/?$ http://%{HTTP_HOST}/$1/$2/$3-$4/?

RewriteRule ^([A-Za-z0-9-]+)/([A-Za-z0-9-]+)/([A-Za-z0-9-]+)_([A-Za-z0-9-]+)_([A-Za-z0-9-]+)_([A-Za-z0-9-]+)/([A-Za-z0-9-]+).html?$ http://%{HTTP_HOST}/$1/$2/$3-$4-$5-$6/$7.html?
RewriteRule ^([A-Za-z0-9-]+)/([A-Za-z0-9-]+)/([A-Za-z0-9-]+)_([A-Za-z0-9-]+)_([A-Za-z0-9-]+)/([A-Za-z0-9-]+).html?$ http://%{HTTP_HOST}/$1/$2/$3-$4-$5/$6.html?
RewriteRule ^([A-Za-z0-9-]+)/([A-Za-z0-9-]+)/([A-Za-z0-9-]+)_([A-Za-z0-9-]+)/([A-Za-z0-9-]+).html?$ http://%{HTTP_HOST}/$1/$2/$3-$4/$5.html?

Falls es noch etwas zu verbessern gibt bin ich für weitere Hinweise immer offen.

Vielen Dank!

Gruß

mallmis

17.07.2014 14:18

Beitrag schreiben (als Gast)

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





[BBCode-Hilfe]