Hallo, ich bräuchte Hilfe bei einem regulären Ausdruck: RewriteEngine on RewriteBase /search RewriteRule ^([^/]*)/([^/]*)[/]*([^/]*)[/]*$ /search/text.php?city=$1&street=$2&nr=$3 [L] Es sollen URLs wie /search/a/b/c entsprechend umgeleitet werden. Der obere Ausdruck funktioniert soweit, allerdings wird das erste "/" gefordert. Ich möchte aber, dass auch die URL /search/123 gültig ist. Im Moment kommt da ein Fehler, bei /search/123/ nicht. Wenn ich den Ausdruck zu RewriteRule ^([^/]*)[/]*([^/]*)[/]*([^/]*)[/]*$ /search/text.php?city=$1&street=$2&nr=$3 [L] ändere bekomme ich grundsätzlich einen Scriptfehler. Was mache ich falsch? Danke!
ggg schrieb: > Was mache ich falsch? Naja es könnte schon helfen wenn du nicht wild irgendetwas kopierst. sonder versuchst es zu verstehen... Auch hat es sich bewährt erstmal Teilausdrücke zu testen bevor man an solchen "Monstern" rumdokter. > /search/123 gültig ist. Dann soltest du das auch so schreiben oder dafür eine eigene Regel definieren. > Moment kommt da ein Fehler, bei /search/123/ nicht. WAS für ein Fehler? Das Problem ist nämlich das dein Audruck 3 Capturing Groups erwartet, was soll den wohl passieren wenn es nur zwei sind? Und das dein Audruck so ziemlich alles matcht ist auch nicht gerade förderlich. Wenn ich mal davon ausgehe das citty eine Postleitzahl mit 5 Stellen ist könnte man zunächst so beginnen:
1 | RewriteRule ^(0-9){5}/?$ /search/text.php?city=$1&street=&nr= [L] |
Das matcht auf alle URLs der form 12345 oder 12345/ Street sei jetzt einfach mal ein String aus Zeichen von a-z Länge beliebig aber > 1..
1 | RewriteRule ^(0-9){5}/([a-z]+)/?$ /search/text.php?city=$1&street=$2&nr= [L] |
Und nummer eine Zahl für die Hausnummer
1 | RewriteRule ^(0-9){5}/([a-z]+)/([0-9]+)/?$ /search/text.php?city=$1&street=$2&nr=$3 [L] |
Also insgesammt:
1 | RewriteRule ^(0-9){5}/?$ /search/text.php?city=$1&street=&nr= [L] |
2 | RewriteRule ^(0-9){5}/([a-z]+)/?$ /search/text.php?city=$1&street=$2&nr= [L] |
3 | RewriteRule ^(0-9){5}/([a-z]+)/([0-9]+)/?$ /search/text.php?city=$1&street=$2&nr=$3 [L] |
Alles ohne wilde Klammern und einen Sternenwald ([/]* heißt das am ende der URL beliebig viele / stehen dürfen, wieso sollte man das wollen?)
Danke, aber deine Lösung funktioniert nicht : kommt immer der 404er Fehler...
Alleine schon RewriteRule ^(0-9){5}/?$ /search/text.php?city=$1&street=&nr= [L] matcht überhaupt nicht und gibt nur einen 404 aus ;)
Naja das war jetzt nur aus dem Gedächtnis hingeschrieben, außerdem gehört zu einem 404 auch noch eine URL... ^(0-9){5}/?$ macht nur auf URLS die exakt 5 Zahlen enthalten und entweder mit einem oder keinem / enden. Eventuell mußt du auch den Prefix search noch mit aufnhemen also etwa so:
1 | ^search/(0-9){5}/?$ /search/text.php?city=$1&street=&nr= [L] |
Jupp, wie gesagt alles auf die schnelle und ohne test geschrieben. Der TE scheint ja wohl die Lust verloren zu haben oder sein Problem anderweitig gelöst bekommen haben.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.