2016-12-24 3 views
1

Ich möchte eine RewriteRule erstellen, um jeden Teil einer Pfadnamen-URL zu erhalten.RegEx htaccess - Holen Sie sich jeden Teil der URL Pfadname

Hier ein Beispiel Beispiel:

Sagen wir, ich diese URL aufrufen:

127.0.0.1/service/param1/param2/param3/param4/param5/param6

Ich möchte diesen Anruf durch diesen umwandeln:

127.0.0.1/index.php?s=servicep_= param1 & p_2 = param2 & p_3 = param3 & P_4 = param4 & p_5 = param5 & pa_6 = param6

habe ich versucht, eine Menge verschiedener RegEx aber whithout leiden Erfolg.

Hier ist diejenige, die ich viel zuversichtlich war, aber es scheitert

RewriteRule ^(str)[/]?(.*)[/]?(.*)[/]?(.*)[/]?(.*)[/]?(.*)[/]?(.*)$ /index.php?s=$1&p_1=$2&p_2=$3&p_3=$4&p_4=$5&p_5=$6&p_6=$7 [L,NC,QSA] 

Jede Hilfe sehr zu schätzen wissen würde!

+0

Sind diese Parameter optional? – Sumurai8

+1

Fast sicher, dass es keine solche Option gibt, aber Sie könnten dies einfach mit PHP machen. Just RewriteRule alles auf die Datei 'index.php', und innerhalb dieser PHP-Datei die Aufteilung – Dekel

+0

Sie haben keine' str' in Ihrer URL. '(Service) [/]? (. *) [/]? (. *) [/]? (. *) [/]? (. *) [/]? (. *) [/]? *) $ sollte es tun. Das '/' muss auch nicht in einer Zeichenklasse sein und Sie möchten wahrscheinlich das '/' s und den Wert dazwischen benötigen. z.B. '(Dienst)/(. +?)/(. +?)/(. +?)/(. +?)/(. +?)/(. *) $'. – chris85

Antwort

1

Da Ihre Parameter optional sind, möchten Sie die gesamten Erfassungsgruppen optional machen, nicht nur Ihre Schrägstriche. Um dies zu erreichen, können wir nicht einfangende Gruppen verwenden.

RewriteRule ^([^/]+)(?:/([^/]*))?(?:/([^/]*))?(?:/([^/]*))?(?:/([^/]*))?(?:/([^/]*))?(?:/([^/]*))?(?:/([^/]*))?$ /index.php?service=$1&p1=$2&p2=$3&p3=$4&p4=$5&p5=$6&p6=$7&p7=$8 [L] 

([^/]+) erfasst den Service. Es ist nicht optional und sollte immer da sein. Der [^/] Teil entspricht einem Zeichen, das kein Schrägstrich ist ... und wir passen mindestens eins an und so viel wie möglich. Dann verwenden wir Gruppen von (?:/([^/]*))?, um jedes Argument zu erfassen. Die ?:-Syntax kennzeichnet eine Gruppe als nicht erfassend. Der Inhalt wird nicht für die Ersatzzeichenfolgen $x verwendet. Die ? hinter der gesamten nicht einfangenden Gruppe macht es zu einem optionalen Argument. Die innere Fanggruppe wird später für den Austausch verwendet. Alle Ersatzzeichenfolgen werden durch etwas ersetzt. Wenn für eine bestimmte Ersetzungsgruppe nichts gefunden wird, wird sie durch die leere Zeichenfolge ersetzt.

Eine URL wie http://example.com/service/param1/param2/param3/ führt zu einer URL als .

Wenn Sie mehr als 8 optionale Parameter zuordnen möchten, sollten Sie die Anfrage an einen Php-Router weiterleiten. Wenn Sie Schlüssel/Wert-Paare als Pfadsegmente haben, kann Ihnen this answer helfen.

+0

Danke Mann! Ich hab es geschafft ! Schätzen Sie die Erklärung der Regex übrigens. – Xor