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
SEO Consulting bei
ABAKUS Internet Marketing Erfahrung seit 2002
- persönliche Betreuung
- individuelle Beratung
- kompetente Umsetzung
Jetzt anfragen:
0511 / 300325-0.
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
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
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
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