Comment passer la limitation a 9 paramètres en url rewriting

WRInaute discret
Bonjour,

J'ai entendu parler de mettre nos différents pramètres dans un array afin de outre passer cette limitation, auriez vous un exemple de comment le contourner ?

Merci d'avance..
 
WRInaute impliqué
Tu peux passer une seule variable contenant plusieurs valeurs séparées par un ... séparateur.
ex. : var1_var2_var3 etc...
Et ensuite tu scindes la chaîne pour récupérer chaque variable.
 
WRInaute discret
Je n'arrive pas a conceptualiser le procédé à appliquer..

Voici mes regles actuelles :
Code:
RewriteEngine on

# nom_departement-34.html
RewriteRule ^([[:alpha:]-]+)-([[:alnum:]]+)\.html$  villes_du_dep.php?dep=$2 [L]

# nom_departement-34-M.html
RewriteRule ^([[:alpha:]-]+)-([[:alnum:]]+)-([[:alpha:]]+)\.html$  villes_du_dep.php?dep=$2&lettre=$3&ndep=$1

# nom_departement-34-nom_ville-13622.html
RewriteRule ^([[:alpha:]-]+)-([[:alnum:]]+)-([[:alpha:]-]+)-([[:digit:]]+)\.html$ categories_metiers.php?dep=$2&idv=$4

# nom_departement-34-nom_ville-13622-nom_categorie-18.html
RewriteRule ^([[:alpha:]-]+)-([[:alnum:]]+)-([[:alpha:]-]+)-([[:digit:]]+)-([[:alpha:]-]+)-([[:digit:]]+)\.html$  metiers_categories.php?dep=$2&idv=$4&idc=$6

# nom_departement-34-nom_ville-13622-nom_categorie-18-nom_metier-1.html
RewriteRule ^([[:alpha:]-]+)-([[:alnum:]]+)-([[:alpha:]-]+)-([[:digit:]]+)-([[:alpha:]-]+)-([[:digit:]]+)-([[:alpha:]-]+)-([[:digit:]]+)\.html$ liste_des_clients.php?dep=$2&idv=$4&idc=$6&idm=$8

# 34-nom_ville-13622-nom_categorie-31-nom_metier-82-nom_client-86.html
RewriteRule ^([[:alnum:]]+)-([[:alpha:]-]+)-([[:digit:]]+)-([[:alpha:]-]+)-([[:digit:]]+)-([[:alpha:]-]+)-([[:digit:]]+)-([[:alnum:]-]+)-([[:digit:]]+)\.html$ fiche_du_client.php?dep=$1&idv=$3&idc=$5&idm=$7&idcl=$9

Techniquement, j'aimerai rajouter un dernier champ "page = 1,2,3,4,5.." a mon client, mais ca me fait le 10 eme parametre..
 
WRInaute discret
Je cherche pas à ce que l'on me mache le travail, loin de là, je préfère apprendre à le faire pour être autonome..

Mais j'ai pas forcément compris le concept à appliquer :/
 
WRInaute discret
Encore moi :)

Sur un sujet parlant du même soucis, un memebre a répondu :

J'opterait pour une suite de division successive du nombre de paramètres que tu veux envoyer.

Ainsi si tu as 13 params tu le décompose en 9+4 ainsi tu sais que dans ta première occurence de la fonction tu as 9 params et 4 dans la 2eme occurence.

Malheureusement, le sujet date un peu et le membre peu actif, je ne peux pas lui demandé directement..

Voyai vous le concept ?


Merci beaucoup de votre aide précieuse.
 
WRInaute impliqué
Dans ton cas il y a une solution BEAUCOUP plus simple, qui t'évite de dépasser la limite des 9 :

Modifier les parenthèses capturantes !

Code:
# 34-nom_ville-13622-nom_categorie-31-nom_metier-82-nom_client-86.html
RewriteRule ^([[:alnum:]]+)-[[:alpha:]-]+-([[:digit:]]+)-[[:alpha:]-]+-([[:digit:]]+)-[[:alpha:]-]+-([[:digit:]]+)-[[:alnum:]-]+-([[:digit:]]+)-[[:alnum:]-]+-([[:digit:]]+)\.html$ fiche_du_client.php?dep=$1&idv=$2&idc=$3&idm=$4&idcl=$5&page=$6
******
Maintenant la solution au problème de la limitation à 9 paramètres

Ton rewriting pour l'instant, c'est du genre :
rewriterule mon_url-variable1-variable2-...etc index.php?variable1=$1&variable2=$2... jusqu'à 9.

Tu pourrais avois quelque chose de plus simple comme

rewriterule mon_url-variable /index.php?variable=$1

variable représente tous tes paramètres concaténés, séparés par un séparateur ("--","-","_",ce que tu veux)

Voici la dernière règle de ton htaccess :
# 34-nom_ville-13622-nom_categorie-31-nom_metier-82-nom_client-86.html
RewriteRule ^([[:alnum:]]+)-([[:alpha:]-]+)-([[:digit:]]+)-([[:alpha:]-]+)-([[:digit:]]+)-([[:alpha:]-]+)-([[:digit:]]+)-([[:alnum:]-]+)-([[:digit:]]+)\.html$ fiche_du_client.php?dep=$1&idv=$3&idc=$5&idm=$7&idcl=$9

Au lieu de ça tu mets :
^(.*)\.html$ fiche_du_client.php?variable=$1

Tu me suis ?

Ensuite, sous php cette fois, tu n'as plus qu'à récupérer $_GET["variable"] et à l'exploser avec des expressions régulières:

Code:
<?php
$v=explode("ton séparateur",$_GET["variable"]);
$dep=preg_match("`^([a-z0-9]+)$`i",$v[0],$out)?$out[1]:false;
$idv=preg_match("`^([a-z0-9]+)$`i",$v[2],$out)?$out[1]:false;
$idc=preg_match("`^([a-z0-9]+)$`i",$v[4],$out)?$out[1]:false;
$idm=preg_match("`^([a-z0-9]+)$`i",$v[6],$out)?$out[1]:false;
$idcl=preg_match("`^([a-z0-9]+)$`i",$v[8],$out)?$out[1]:false;
$page=preg_match("`^([a-z0-9]+)$`i",$v[10],$out)?$out[1]:false; // il est là ton 10ème paramètre
?>
 
Discussions similaires
Haut