mod_rewrite gibt nur die erste $var zurück!

xamunrax

Erfahrenes Mitglied
Hallo,

ich habe nun bereits seit einer guten halben Stunde "gegoogelt" und hier im Forum gesucht...

Hier erstmal der Code:

.htaccess
Code:
RewriteEngine on 
RewriteRule ^([a-z]+)/([a-zA-Z]+)_([0-9]+)\.html$ $1.php?name=$2&alter=$3

test.php
PHP:
     extract($_SERVER);
     extract($_ENV);
     extract($_GET);
     extract($_POST);
     extract($_REQUEST);
     extract($_FILES);
     echo "NAME: $name"."<br>"."Alter: $alter";

Die URL lautet http://www.meineseite.de/test/Marco_31.html

Ausgabe:
Code:
NAME:
Alter:

Er greift zwar auf die test.php zu, jedoch übergibt er nicht variable 2 und 3, woran kann das liegen?

gruß,

Marco
 
Kann das evtl. an den Slashes ( / ) liegen?
Code:
...ule ^([a-z]+)/([a-zA-...

Mache ich das ganze mit ( - ) geht es einwandfrei,
Code:
...ule ^([a-z]+)-([a-zA-...
jedoch möchte ich das gern mit den o.g. Slashes haben.
 
Verwende bloß nicht extract()! Auch wenn es vielleicht Bequemlichkeit schafft, birgt es ein gehöriges Sicherheitsrisiko, da somit die Herkunft der Werte nicht mehr bestimmt werden kann! Siehe dazu auch Register Globals.
 
Das war nur zum Test, ist in allen meinen "test.php"´s... geht schneller. Aber Gumbo hast du vielleicht ne Idee wie ich das Problem mit dem mod_rewrite löse?

gruß, Marco
 
Ich vermute mal das dein Regulärer Ausdruck nicht stimmt du Escape die 2 Klammer!

Dadurch kann er die Variable nicht mehr als Variable erkennen ()

Mfg Splasch
 
Sollte der reguläre Ausdruck syntaktisch nicht korrekt sein, würd Apache dies in Form einer Fehlers (500 Internal Server Error) bemängeln. Was in diesem Fall jedoch nicht zutrifft, da ja auch die richtige Datei aufgerufen wird.
 
Sollte der reguläre Ausdruck syntaktisch nicht korrekt sein, würd Apache dies in Form einer Fehlers (500 Internal Server Error) bemängeln. Was in diesem Fall jedoch nicht zutrifft, da ja auch die richtige Datei aufgerufen wird.

Naja für den Apache ist der Syntax richtig aber er Wertet den anders aus als gewünscht.
Das ist der Punkt bei der Sache den Apache nimmt an was zwischen () steht als variable steht aber nur ) hat das wieder eine andere bedeutung.

Mfg Splasch
 
Bei mir funktioniert das alles wie geplant.
Diese Variablen müssen ja auch mindestens 1 Zeichen als Inhalt haben, sonst würde der Ausdruck ja nicht zutreffen und nicht umgeschrieben werden.


Schreibs mal so:
Code:
RewriteRule ^([a-z]+)/([a-zA-Z]+)_([0-9]+)\.html$ /$1.php?name=$2&alter=$3 [R]
...um zu Sehen, worin nun wirklich umgeschrieben wird.

Hast du nach dieser Rule evtl. noch weitere stehen, welche das Ergebnis der 1. Rule beeinflussen könnten?
Poste mal die gesamte .htaccess(falls da noch mehr drinnensteht als das Gepostete)

Lass die mal nur GET ausgeben...was steht da drinnen?
 
Zuletzt bearbeitet:
Naja für den Apache ist der Syntax richtig aber er Wertet den anders aus als gewünscht.
Das ist der Punkt bei der Sache den Apache nimmt an was zwischen () steht als variable steht aber nur ) hat das wieder eine andere bedeutung.
Aber der genannte reguläre Ausdruck ist doch syntaktisch korrekt! Denn anderenfalls würde eine Fehlermeldung ausgegeben statt wie hier die Regel anzuwenden und die richtige Datei aufzurufen.
Aber vielleicht verwechselst du ja nur den literalen Schrägstrich „/“ mit dem Maskierungszeichen „\“.
 
Zurück