Ich möchte ja nicht den Originalstrin anhängen, sondern eine veräderten
Das glaube ich nicht. Deinem Beispiel zu folge möchtest du schon an den notierten QueryString den urspr. QueryString wieder anhängen, ohne diesen zu verändern. Per default würde der QueryString durch den neu notierten ersetzt werden. Insofern ist das von Dirk vorgeschlagene QSA-Flag schon goldrichtig.
Vielleicht noch mal zur Verdeutlichung:
/foo?bar --> /cgi-bin/prog1.pl?s=te&p1=5 per default
/foo?bar --> /cgi-bin/prog1.pl?s=te&p1=5&bar per QSA-Flag
Wenn ich angeben würde
RewriteRule ^test(.*)$ /cgi-bin/prog1.pl?s=te&p1=5$1
würde statt dem & das ? stehen
Nein. Der QueryString ist hier nicht verfügbar. Du prüfst im Verzeichniskontext gegen einen lokalen physischen Pfad, also bei Notation unter /var/www/ (durch .htaccess oder <Directory /var/www> in der httpd.conf) ursprünglich gegen /var/www/test, das Verzeichnisprefix /var/www/ wird entfernt, also prüfst du gegen 'test' (ohne ' natürlich). Ein QueryStrig ist hier nicht vorhanden, entspr. auch kein "?". Insofern ist dein regulärer Ausdruck ^test$ schon richtig ($ = Ende der Zeichenkette).