I trouvé une solution pour faire cette transformation sans modifier le code.
Dans le httpd.conf (dans mon VirtualHost section) Je définir une feuille de réécriture:
RewriteMap programmap prg:/var/www/localhost/htdocs/chg.php
Ensuite, dans le .htaccess je mis les règles suivantes:
RewriteEngine On
RewriteCond %{QUERY_STRING} (.*)
RewriteRule ^(script.php) $1?${programmap:%1} [L]
1 $ support pour le premier "()" dans RewriteRule
% 1 représente le premier "()" dans RewriteCond
Alors j'écrire ce script "/var/www/localhost/htdocs/chg.php" (en PHP, mais peut être en C, Perl, ou whatelse):
#!/usr/bin/php -f
<?php
$pos1 = 2;
$pos2 = $pos1 + 1;
$reg = '/(([a-z0-9_]+)\[\]=([^&]*))/';
while(true){
$res=array();
$buff = trim(fgets(STDIN));
if(feof(STDIN)){
break;
}
$r = preg_match_all($reg, $buff, $match,PREG_SET_ORDER);
if($r){
foreach($match as $row){
if(!isset($res[$row[$pos1]])){
$res[$row[$pos1]] = $row[$pos1]."=".$row[$pos2];
} else {
$res[$row[$pos1]] .= ",".$row[$pos2];
}
}
$out=join('&',$res);
} else {
$out=$buff;
}
echo "$out\n";
}
Il est tout à fait possible.Mais je ne le ferais pas avec mod_rewrite mais avec PHP. – Gumbo
J'ai aussi cette question ... –