Я нашел решение сделать это преобразование без изменения кода.
В httpd.conf (в моем разделе VirtualHost ) я определяю карту перезаписи:
RewriteMap programmap prg:/var/www/localhost/htdocs/chg.php
Затем в .htaccess я установил следующие правила:
RewriteEngine On
RewriteCond %{QUERY_STRING} (.*)
RewriteRule ^(script.php) $1?${programmap:%1} [L]
$ 1 обозначает первый "()" в RewriteRule
% 1 обозначает первый "()" в RewriteCond
Затем я пишу этот скрипт " / var / www / localhost / htdocs / chg.php " (в PHP, но может быть на C, Perl или 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";
}