Seite 1 von 1

mod rewrite für 2. Parameter

Verfasst: 16.08.2004, 17:44
von pfuchs
Hallo Forumer,

bisher habe ich URL´s mit einem Parameter,
also zB. show_cat.php?cat_id=12 wie folgt umgeschrieben:
RewriteEngine on
RewriteCond %{REQUEST_URI} blabla-(.*)\.html$
RewriteRule blabla-(.*)\.html$ /show_cat.php?cat_id=$1
Raus kam dabei: blabla-12.html

Wie schreibe ich, nun URL´s mit zwei Parametern,
also z.B. show_cat.php?cat_id=12&page=3 um?

Rauskommen, soll sowas wie: blabla-12-3.html

Besten Dank für jeden Tipp.

Peter

Verfasst:
von

Verfasst: 16.08.2004, 18:39
von warry
RewriteRule blabla-(.*)-(.*)\.html$ /show_cat.php?cat_id=$1&page=$2

Diese dann als erste rule, sonst wird die andere rule zuerst greifen.

Greets
warry

Verfasst: 17.08.2004, 20:26
von MikeD
Sorry aber ich häng mich mal an die Frage ran:

ich hab - um obiges Beispiel mal so zu übernehmen folgendes drin:

RewriteRule (.[0-9])/(.*)\.html$ /show_cat.php?cat_id=$1

mußte ich leider, weil mir sonst meine sonstigen Strukturen /text/usw. ggf. in Mitleidenschaft gezogen werden.

Funktioniert soweit sogut - mit dem klitzekleinen aber sehr nervigen problemchen:
/10/xxx bis /99/xxx werden korrekt weitergeleitet.
/1/xxx bis /9/xxx nicht
und /100/xxx aufwärts ebenfalls nicht.

Irgendwie sind die regulären Ausdrücke nix für meinen Zwischen-Ohr-Algo :(

habs schon mit \d probiert - auch kein Erfolg - bekommst nur mit (.*) zum laufen.

Hat jemand nen Tipp - wäre toll.

Gruß
Mike

Verfasst: 17.08.2004, 21:05
von warry
RewriteRule (.[0-9])/(.*)\.html$ /show_cat.php?cat_id=$1
Wie sieht's denn mit \d+ aus, also
RewriteRule ^(\d+)/(.*)\.html$ /show_cat.php?cat_id=$1

Das sollte eine Ziffernfolge vor dem ersten Slash finden.
In deiner Rule kann das Zeichen vor der Ziffer ein beliebiges Zeichen sein, dafür steht der Punkt. Deine Rule würde also auch c9 oder sowas matchen.

Ich empfehle das Camel-Buch, daraus hab ich es auch so halbwegs gelernt ;-)

Greets
warry

Verfasst: 17.08.2004, 21:33
von MikeD
danke warry,

camel-buch .... überfordere doch nen armen Mann mit wilkinson-allergie aufm kopf nicht :-(

die Regel scheint logisch - der punkt hat mir das mit dem \d vermasselt :D

nur dass ich auf (\d+)/(\d+)/(\d+)/(.*)\.html$ /show_cat.php?cat_id=$1&etc.
erweitern muß mit einer Regel - denke dann ohne ^ sollte es funzen - muß ich mal testen.

hab die regulären ausdrücke schon bei golive vermalledeit 8)

Gruß
Mike
und danke nochmal

Verfasst: 17.08.2004, 21:47
von warry
Man verzeihe mir den Ref-Link:
https://www.amazon.de/exec/obidos/ASIN/ ... chno03-21/

Weiß ja nicht, wie deine URLs aussehen, aber (\d+)/ findet "1" oder "12" oder "123" oder "123456789" usw.

^ bedeutet im diesem Fall, daß die Ziffernfolge am Anfang stehen muß.

Und so schwer ist das auch nicht ;-)

Greets
warry

Verfasst: 19.08.2004, 22:45
von Halli
MikeD hat geschrieben:RewriteRule (.[0-9])/(.*)\.html$ /show_cat.php?cat_id=$1
Funktioniert soweit sogut - mit dem klitzekleinen aber sehr nervigen problemchen:
/10/xxx bis /99/xxx werden korrekt weitergeleitet.
/1/xxx bis /9/xxx nicht
und /100/xxx aufwärts ebenfalls nicht.
Das (.[0-9]) findet eine Folge aus IRGENDEINEM Zeichen und EINER Ziffer, also 10-99, wie Du ja richtig postest. Aber auch a1 würde gefunden.

Beliebig viele Zahlen findest Du mit ([0-9]*), insgesamt also:
RewriteRule ([0-9]*)/(.*)\.html$ /show_cat.php?cat_id=$1

Verfasst: 19.08.2004, 22:55
von MikeD
Hoi Halli,

kam noch nicht dazu das \d als 'nicht geklappt' anzumerken.

Danke für deinen tip - demzufolge würde [0-9] ja den '.' ersetzen - jetzt hört sich das für mich logisch an :)

muß ich nachher mal testen. Danke :D

Gruß
Mike

Verfasst: 24.08.2004, 21:54
von pfuchs
@warry,
RewriteRule blabla-(.*)-(.*)\.html$ /show_cat.php?cat_id=$1&page=$2

Danke hat geklappt.

Jetzt würde ich noch gerne, die Dateinamen sinnvoll vergeben. Z.B. analog zum Seitentitel (=Variable aus Datenbank).

Würde also gerne, statt "blabla-" eine Variable (aus Datenbank) einbinden.

Geht das überhaupt?

Beste Grüsse, Peter

Verfasst: 24.08.2004, 22:19
von Halli
pfuchs hat geschrieben:Jetzt würde ich noch gerne, die Dateinamen sinnvoll vergeben. Z.B. analog zum Seitentitel (=Variable aus Datenbank).

Würde also gerne, statt "blabla-" eine Variable (aus Datenbank) einbinden.

Geht das überhaupt?
Ja, Du kannst den eigentlich relevanten Ziffern natürlich beliebigen Text voranstellen. Allerdings würde ich die Ziffern nicht mit (.*), sondern mit ([0-9]*) maskieren, also:

Code: Alles auswählen

RewriteRule (.*)-([0-9]*)-([0-9]*)\.html$ /show_cat.php?cat_id=$2&page=$3 

Verfasst: 25.08.2004, 07:53
von pfuchs
@Halli,
RewriteRule (.*)-([0-9]*)-([0-9]*)\.html$ /show_cat.php?cat_id=$2&page=$3
Aber ich muss doch irgendwo angeben, welche Variable ich übergebe!? Oder passiert das mit den Linktext (Beispiel: a href="dideldadel-1-3.html") Und dann wird "dideldadel" automatisch als erste Variable erkannt??

Und danke für den Tipp mit [0-9] - welche Vorteile hat das denn?

Beste Grüsse, Peter

Verfasst: 25.08.2004, 08:30
von warry
Was in der ersten Klammer steht findet sich in $1 (usw. 2. Klammer = $2...)wieder, also in deinem Beispiel "dideldadel".

Greets
warry

Verfasst: 25.08.2004, 08:41
von pfuchs
@warry,

nochmal für einen Nix-Checker wie mich.

Angenommen "dideldadel" ist der Seitentitel bei mir.
Dieser wird für die html-ausgabe aus einer datenbank geholt, also z.b.
<?php
$titel = .....
echo "<title>$title</title>
?>
Muss ich nun noch angeben (damit htaccess weiss, was $1 sein soll)
$1 = $title;
Oder zieht er sich den Wert für $1 automatisch aus der HREF-Angabe (siehe vorheriges Beispiel?

Besten Dank, Peter

Verfasst: 25.08.2004, 09:45
von warry
$1 = $title;
Nein
Oder zieht er sich den Wert für $1 automatisch aus der HREF-Angabe (siehe vorheriges Beispiel?
Ja, wenn du es so ausdrücken willst. $1 steht für das, was mit der ersten Klammer "matched".

Probier es doch einfach mal aus ;-)

Greets
warry