You can try this (sorry, not previously tested). See comments inline for explanation:
RewriteEngine On
## if any string separated by | is matched, it will append to ?page=
RewriteRule ^(members|add-members|delete)$ admin.php?page=%1 [L,E=CLEAN_CONTACT_URL:1,QSA]
## If querystring starts with page= and is followed by any string separated by |
## put that in the first group. Then put any other characters in second group
RewriteCond %{QUERY_STRING} ^page=(members|add-members|delete)(.*)$
RewriteCond %{ENV:REDIRECT_CLEAN_CONTACT_URL} !1
RewriteRule ^admin.php$ /wp-admin/%1?%2 [R,L]
You can probably rewrite the rule to be more generic. The main issue you’re having with:
RewriteCond %{QUERY_STRING} ^page=(.*)$
is that the (.*)$
matches ALL characters including your subsequent &foo=bar
so the entire querystring is lumped into %1
and your %2
is empty.