Limitation paramètres dans fichier .htaccess
Tags : Apache, Astuces, Url rewriting, Regex
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
- Url Rewriting en ASP avec ISAPI Rewrite
- Drivers Odbc 32 bits sur windows 2003/2008 64bits
- Gestion des bordures intérieurs et extérieurs en CSS