2009-05-19 3 views
0

Ich bin ein total n00b bei mod_rewrite und was ich versuche, einfach zu tun klingt:Kann mod_rewrite eine beliebige Anzahl von Parametern mit beliebigen Namen konvertieren?

statt mit domain.com/script.php?a=1 & b = 2 & c 3 = Ich mag würde zu haben:

domain.com/script|a:1;b:2;c:3

Das Problem ist, dass mein Skript eine große Anzahl von Parametern in einer Vielzahl von Kombinationen nimmt, und Ordnung ist unwichtig Daher ist es unmöglich, jeden im Ausdruck zu kodieren und eine bestimmte Reihenfolge zu erwarten. Kann also eine Regel eingerichtet werden, die alle Parameter unabhängig von der Reihenfolge oder Anzahl der Parameter an das Skript übergibt? Wenn also jemand

domain.com/script|a:1:b:2;j:7 tippt, wird er alle diese Params und Werte genauso übergeben wie bei domain.com/script|b:2 ; a: 1; ?

Danke!

Antwort

3

Ich würde PHP verwenden, um die angeforderte URL-Pfad zu analysieren:

$_SERVER['REQUEST_URI_PATH'] = parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH); 
$params = array(); 
foreach (explode(',', substr($_SERVER['REQUEST_URI_PATH'], 6)) as $param) { 
    if (preg_match('/^([^:]+):?(.*)$/', $param, $match)) { 
     $param[rawurldecode($match[1])] = rawurldecode($match[2]); 
    } 
} 
var_dump($params); 

Und die mod_rewrite Regel solche Anfragen an Ihren /script.php Datei neu zu schreiben:

RewriteRule ^script\|.+ script.php [L] 
+0

ok das hat funktioniert! hatte ein bisschen Kartierung Schwierigkeiten, aber ich habe es. Vielen Dank! – nerdabilly