Guillaume Legault
12 mars 2010

.htaccess

Problème :

Que faire si on a plus que 9 arguments à gérer dans une règle de réécriture ?

Solution :

On peut utiliser l’instruction RewriteMap avec le paramètre prg, qui lui apelle un script Perl.

Exemple :

Contenu du fichier .htaccess :

RewriteMap manyargs prg:/home/projet/splitargs.pl
RewriteEngine On
RewriteRule ^/blog/(.*)$ /blog.php?$(manyargs:$1) [PT]

Contenu du fichier splitargs.pl :

#!/usr/bin/perl
$|=1
my $i=0;
my @args = split !/!, $_;
foreach my $args (@args) {
  $i++;
  $return .= "&arg$i=$arg";
}
$return =~ s/^&//;
print $return


Discussion :

Cette règle permettra un nombre indéfini d’arguments d’apparaître dans l’URL et générera une requête avec ces arguments nommés séquentiellement.

Cela peut s’avérer très utile dans le cas ou on a plus de 9 arguments à traiter. Le traitement des expressions régulières dans mod_rewrite est limité à 9 arguments tout simplement parce que le 10e argument ($10) serait indifférentiable du 1er ($1) suivi d’un « 0″.

Je trouve étrange qu’on soit limité de la sorte… selon moi il aurait pu y avoir un moyen d’échapper les arguments à 2 chiffres. Mais bon, avec l’instruction RewriteMap et un simple script Perl, il est possible de pallier cette limitation!





2 Commentaires


12 mars 2010 par Francois Viens

Il est aussi possible avec un certain flag de forcer de relancer les règles du début mais cette fois avec l'Url déjà processé.... Ça permettrait donc de matcher large et rafiner en bouclant en s'assurant d'avoir une clause de sortie fiable pour éviter la boucle infinie!!!

13 juillet 2011 par Denis TRUFFAUT

Sinon, on peut aussi utiliser ${10} ... :D