Pattern PRG, ordre des get, url rewriting - htaccess

stck

Nouveau WRInaute
Bonjour à tous, je suis confronté à un petit problème de rewriting :
Dans mon htaccess j'ai ça :
Code:
RewriteRule ^recherche(.*)$ /rechercher.php?param1=$1&param2=$2&param3=$3$param4=$4&param5=$5 [QSA]
l'url est donc comme ceci : recherche?param1=xx&param2=xx&param3=xx&param4=xx&param5=xx
:arrow: l'avantage de ça c'est que je peux mettre les param dans l'ordre que je veux, en oublier certains etc ça ne plante pas (mais c'est pas super beau)

Je voudrais obtenir une URL comme ceci :
recherche/param1:xx/param2:xx/param3:xx/param4:xx/param5:xx
ma rewrite rule est comme ceci :
Code:
RewriteRule ^recherche/param1:([a-zA-Z0-9\-]*)/param2:([a-zA-Z0-9\-]*)/param3:([a-zA-Z0-9\-]*)/param4:([a-zA-Z0-9\-]*)/param5:([a-zA-Z0-9\-]*)$ rechercher.php?param1=$1&param2=$2&param3=$3$param4=$4&param5=$5 [L]
J'utilise un pattern prg assez simple pour rediriger mon url avec les params et ça marche très bien. Sauf que ...
:arrow: Le désavantage de cette méthode c'est que je ne peux pas intervertir les params ni en réduire le nombre ex :
recherche/param3:xx/param1:xx/param4:xx

à moins de me taper toutes les règles une par une dans le htaccess (ça en ferait vraiment beaucoup, du coup je me demande si c'est bien optimisé d'en mettre autant ...), est-ce que vous connaissez une méthode ou auriez une solution pour ça? :D (peut être un truc magique que j'aurai loupé dans le htaccess?)

D'avance merci à ceux qui sauront me répondre.
 

spout

WRInaute accro
Allez un petit exemple:

.htaccess
Code:
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [QSA,L]

index.php
PHP:
<span class="syntaxdefault"><br /></span><span class="syntaxkeyword"><?</span><span class="syntaxdefault">php<br />$params&nbsp;</span><span class="syntaxkeyword">=&nbsp;isset(</span><span class="syntaxdefault">$_SERVER</span><span class="syntaxkeyword">[</span><span class="syntaxstring">'PATH_INFO'</span><span class="syntaxkeyword">])&nbsp;?&nbsp;</span><span class="syntaxdefault">$_SERVER</span><span class="syntaxkeyword">[</span><span class="syntaxstring">'PATH_INFO'</span><span class="syntaxkeyword">]&nbsp;:&nbsp;</span><span class="syntaxdefault">null</span><span class="syntaxkeyword">;<br /></span><span class="syntaxdefault">$params&nbsp;</span><span class="syntaxkeyword">=&nbsp;</span><span class="syntaxdefault">explode</span><span class="syntaxkeyword">(</span><span class="syntaxstring">'/'</span><span class="syntaxkeyword">,&nbsp;</span><span class="syntaxdefault">$params</span><span class="syntaxkeyword">);<br /></span><span class="syntaxdefault">array_shift</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$params</span><span class="syntaxkeyword">);<br /><br />if&nbsp;(!empty(</span><span class="syntaxdefault">$params</span><span class="syntaxkeyword">))&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="syntaxdefault">$namedParams&nbsp;</span><span class="syntaxkeyword">=&nbsp;array();<br />&nbsp;&nbsp;&nbsp;&nbsp;foreach&nbsp;(</span><span class="syntaxdefault">$params&nbsp;</span><span class="syntaxkeyword">as&nbsp;</span><span class="syntaxdefault">$param</span><span class="syntaxkeyword">)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(</span><span class="syntaxdefault">strpos</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$param</span><span class="syntaxkeyword">,&nbsp;</span><span class="syntaxstring">':'</span><span class="syntaxkeyword">)&nbsp;!==&nbsp;</span><span class="syntaxdefault">false</span><span class="syntaxkeyword">)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;list(</span><span class="syntaxdefault">$named</span><span class="syntaxkeyword">,&nbsp;</span><span class="syntaxdefault">$value</span><span class="syntaxkeyword">)&nbsp;=&nbsp;</span><span class="syntaxdefault">explode</span><span class="syntaxkeyword">(</span><span class="syntaxstring">':'</span><span class="syntaxkeyword">,&nbsp;</span><span class="syntaxdefault">$param</span><span class="syntaxkeyword">);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="syntaxdefault">$namedParams</span><span class="syntaxkeyword">[</span><span class="syntaxdefault">$named</span><span class="syntaxkeyword">]&nbsp;=&nbsp;</span><span class="syntaxdefault">$value</span><span class="syntaxkeyword">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="syntaxdefault">print_r</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$namedParams</span><span class="syntaxkeyword">);<br />}<br />&nbsp;</span><span class="syntaxdefault"></span>

http://example.com/a:1/b:2/c:3
Affichera:
Array ( [a] => 1 => 2 [c] => 3 )
 

stck

Nouveau WRInaute
Huuuuu, je suis désolé, j'ai complétement oublié de répondre, merci, merci beaucoup spout !
Ça a totalement résolu mon problème :mrgreen:
 

Discussions similaires

Haut