www.mikrocontroller.net

Forum: PC-Programmierung regex: mod_rewrite


Autor: ggg (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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!

Autor: Läubi .. (laeubi) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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:
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..
RewriteRule ^(0-9){5}/([a-z]+)/?$ /search/text.php?city=$1&street=$2&nr= [L]

Und nummer eine Zahl für die Hausnummer
RewriteRule ^(0-9){5}/([a-z]+)/([0-9]+)/?$ /search/text.php?city=$1&street=$2&nr=$3 [L]


Also insgesammt:
RewriteRule ^(0-9){5}/?$ /search/text.php?city=$1&street=&nr= [L]
RewriteRule ^(0-9){5}/([a-z]+)/?$ /search/text.php?city=$1&street=$2&nr= [L]
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?)

Autor: ggg (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke, aber deine Lösung funktioniert nicht : kommt immer der 404er 
Fehler...

Autor: ggg (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Alleine schon RewriteRule ^(0-9){5}/?$ 
/search/text.php?city=$1&street=&nr= [L]

matcht überhaupt nicht und gibt nur einen 404 aus ;)

Autor: Läubi .. (laeubi) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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:
^search/(0-9){5}/?$ /search/text.php?city=$1&street=&nr= [L]

Autor: ... (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
...(0-9){5}...

sollte das nicht eher
...([0-9]{5})...
heißen?

Autor: Läubi .. (laeubi) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.