2009-03-18 7 views
0

Ich möchte eine URL zu ergreifen, um der Lage sein, wie:mod_rewrite: Konvertieren Sie ‚Ordner‘ in URL in Abfrage-Parameter

http://www.example.com/valOne/valTwo/valThree/valFour/valFive 

und wandeln es in:

http://www.example.com/index.php?one=valOne&two=valTwo&three=valThree&four=valFour&five=valFive 

ich wirklich nur ein paar brauchen Abfrageparameter für meine Anwendung, so dass der reguläre Ausdruck diese fünf hart codiert haben könnte, aber es wäre schön, wenn er dynamisch neue Abfrageparameter erstellen könnte, wenn zusätzliche "Ordner" zur URL hinzugefügt werden. Darüber hinaus werden nicht immer alle fünf Ordner oder QPs vorhanden sein, so dass es in der Lage sein muss, dies angemessen zu handhaben.

Antwort

6

Hier ist eine mod_rewrite Regel, die Ihren Bedürfnissen entspricht:

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^([^/]*)/?([^/]*)/?([^/]*)/?([^/]*)/?([^/]*)/?$ index.php?one=$1&two=$2&three=$3&four=$4&five=$5 

Aber es wäre sicherlich einfacher, wenn Sie die angeforderte URI-Pfad mit PHP statt analysieren:

dieses große Werk
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule !^index\.php$ index.php 

$_SERVER['REQUEST_URI_PATH'] = preg_replace('/\?.*/', '', $_SERVER['REQUEST_URI']); 
$segments = explode('/', trim($_SERVER['REQUEST_URI_PATH'], '/')); 
var_dump($segments); 
+0

Dank! Eine Frage, was das bedeutet: RewriteCond% {REQUEST_FILENAME}! -f ?? – macinjosh

+0

Es prüft, ob der angeforderte URI einer vorhandenen Datei ('-f') zugeordnet werden kann. Wenn dies der Fall ist, wird die Regel nicht angewendet. Andernfalls würde jeder URI zu 'index.php' umgeleitet werden (selbst' index.php' selbst, da er auch mit '[^ /] *' übereinstimmen würde). Siehe http://httpd.apache.org/docs/2.2/mod/mod_rewrite.html#rewritecond – Gumbo

+0

Wo würde ich das PHP-Skript einfügen? Es scheint, als ob ich es in site.com/Dir1/default.php und die URL wäre site.com/Dir1/Dir2/default.php, dass Dir1/nie ausführen würde (tat das mit einem schnellen Test). –