regex: mod_rewrite

Gast #1868986
Lesenswert?

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!
Persönliche Seite #1869038
Lesenswert?

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?)
Persönliche Seite #1869524
Lesenswert?

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]

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren