2009-04-03 11 views
5

Offenbar gibt es eine Begrenzung (9) auf, wie viele Rückreferenzierungen Sie in .htaccess RewriteRules zugreifen können ..mod_rewrite Anzahl der Parameter/Rückreferenzierungen Begrenzung

Aber wir haben eine RewriteRule, die mehr als 9 Parameter erfordert, so etwas wie dies:

RewriteRule ^([^/]+)/b([0-9]+)(/a([0-9]+))?(/v([0-9]+))?(,([0-9]+))?(/(ajax|share))?(,complete)?$ /index.php?control=sites&site=brands&control_file=version_select&name=$1&campaign_id=$2&answer=$4&page=$8&option=$10&video_id=$6&page_type=research [L] 

Also, was passiert, wenn Sie versuchen, „$ 10“ zugreifen zu können, ist, dass es $ 1 verwendet und stellt ein 0 direkt daneben.

Hat jemand dieses Problem lösen können, irgendwelche alternativen Lösungen oder irgendetwas?

Danke!

Antwort

17

Eigentlich müssen Sie nicht alles erfassen. Schreibe nicht-einfangende Gruppen (eingeführt mit "?:") für die Dinge, die du nicht wiederverwenden willst, das sollte dir wieder etwas Platz zum Atmen geben. Vergleichen:

 
Yours:      Mine: 
------------------------- --------------------------- 
^([^/]+)/b   $1  ^([^/]+)/b   $1 
([0-9]+)   $2  ([0-9]+)    $2 
(/a([0-9]+))?  $4  (?:/a([0-9]+))?  $3 
(/v([0-9]+))?  $6  (?:/v([0-9]+))?  $4 
(,([0-9]+))?  $8  (?:,([0-9]+))?  $5 
(/(ajax|share))? $10!  (?:/(ajax|share))? $6 
(,complete)?$  $11!  (,complete)?$   $7 

Aber mit mod_rewrite allein können Sie nicht höher als 9 Rückverweise gehen. Wenn Sie mehr benötigen, verwenden Sie eine Alternative - zum Beispiel erfassen Sie nur die wichtigsten Teile beim Neuschreiben und führen Sie eine String-Verarbeitung mit dem Rest der URL in Ihrer App durch.

+1

Du bist mein heutiger Held – Korcholis

5

Eine Lösung könnte sein, die gleiche Regex zu verwenden, ohne erfasst, und die Anfrage übergeben

Dann index.php verwenden, um index.php die Anforderungs-URI durch die Schrägstriche zu explodieren und Sie können von dort aus arbeiten mit die Daten.

9

Eine, obwohl ziemlich dumm, Idee wäre, das Neuschreiben in zwei Schritten zu tun, das heißt, Kette zwei RewriteRule s mit der ersten Regel, die es in ein Zwischenformat umschreibt.

+1

+1, denn obwohl (wie Sie darauf hinweisen) eine "dumme" Idee ist, ist sie in der Tat eine gültige. – UnkwnTech

Verwandte Themen