Limitation paramètres dans fichier .htaccess

Il m'est arrivé dans certains projet d'avoir de nombreux paramètres dans les adresse. Rien de bien compliqué dans un premiet temps, sauf lorsque l'on souhaite ré-écrire une URL avec plus de 9 paramètres.

Explication

Pour faire simple, rien de mieux qu'un exemple !

RewriteEngine on
 
# Exemple 1
# Url test : informations-1-p-2-q-3-r-4-s-5-t-6-u-8-v-9-w-10.html
RewriteRule ^informations-([0-9]*)-p-([0-9]*)-q-([0-9]*)-r-([0-9]*)-s-([0-9]*)-t-([0-9]*)-u-([0-9]*)-v-([0-9]*)-w-([0-9]*)-x-([0-9]*).html$ informations.php?id=$1&p=$2&q=$3&r=$4&s=$5&t=$6&u=$7&v=$8&w=$9&x=$10 [L]
 
# Exemple 2
# Url test : informations-1-p-2-t-6.html
RewriteRule ^informations-([0-9]*)(-p-[0-9]*)?(-q-([0-9]*))?(-r-([0-9]*))?(-s-([0-9]*))?(-t-([0-9]*)).html$ informations.php?id=$1&p=$3&q=$5&r=$7&s=$9&t=$11 [L]

Exemple 1
Dans cet exemple, notre adresse devra contenir tous les paramètres soit un total de 10 paramètres / variables.

Exemple 2
Pour le second exemple, il y a un paramètre obligatoire ainsi que cinq paramètres facultatifs. Donc 11 variables.

Jusque là il n'y a aucun problèmes. Seulement si vous testez ces ré-écritures vous remarquez un problème pour les paramètres supérieurs à 10.
En effet le second chiffre de la variable n'est pas pris en compte. Donc $10 correspond à $1.

Malhreusement pour le permier exemple je n'ai trouvé aucune solution... On est bien limité à 9 paramètres.
Mais pour le second exemple il existe un moyen de remédier au problème.

Solution

La solution consiste à indiquer qu'on ne souhaite pas récupérer la variable. Pour celà il suffit d'ajouter ?: après les parenthèse limitant la variable.

Voici ce que ça donnerais pour notre second exemple.

# Exemple 2
# Url test : informations-1-p-2-t-6.html
RewriteRule ^informations-([0-9]*)(?:-p-[0-9]*)?(?:-q-([0-9]*))?(?:-r-([0-9]*))?(?:-s-([0-9]*))?(?:-t-([0-9]*)).html$ informations.php?id=$1&p=$2&q=$3&r=$4&s=$5&t=$6 [L]

En espérant avoir résolu vos problèmes !

Billets relatifs

Ajouter un commentaire





Les commentaires sont validés manuellement afin d'éviter le spam.