on va faire court il est tard, ca ma pris la soirée à résoudre , voila la partie du .htaccess

  RewriteCond %{REQUEST_URI} ^/$
  RewriteCond %{QUERY_STRING} (.+)
  RewriteRule (.*)$ http://%{SERVER_NAME}/%1? [R=301,L]

donc si on demande /?qqchose on est redirigé vers /qqchose , je n'ai pas réussis a faire marcher la meme chose pour index.php? car j'ai un pb de boucle...

en écrivant ce billet j'ai eu la révélation, la réponse, la solution.
je viens de passer le blog en PATH_INFO (il était encore en QUERY_STRING cf vieux billets sur mod_rewrite + dotclear) j'ai modif la ligne pour le rewrite du blog:

  RewriteRule (.*)$ index.php?$1 [L]

devenu

  RewriteRule (.*)$ index.php/$1 [L]

ennorme modif il faut avouer, mais au lieu de redirect les /trucdublog vers /index.php?trucdublog il pointe sur /index.php/trucdublog (en redirect Interne, non visible au client)

j'ai donc modif le reste pour que ca marche comme je voulais a savoir /?qqchose & /index.php?qqchose redirigé vers /qqchose

  RewriteCond %{REQUEST_URI} ^(/|/index.php)$
  RewriteCond %{QUERY_STRING} (.+)
  RewriteRule (.*)$ http://%{SERVER_NAME}/%1? [R=301,L]

si la demande est / ou /index.php et que la query_string n'est pas vide (en regexp "+" = 1char mini), on répond 301 et indique la nouvelle url

et voila, magie!
le code HTTP 301 est un "301 Moved Permanently Document déplacé de façon permanente" (source) il forcerat le cache à s'update "normalement" le 302 est un temporaire