Steps to make .htaccess to remove question mark from URL otherwise ?id=(.*)?

# Rewrite for ?id=(.*)
RewriteCond %{QUERY_STRING} ^id=(.*)$
RewriteRule .*$ %{REQUEST_URI}%1? [R=301,L]

# It does not work out on this way
RewriteCond %{QUERY_STRING} !=""
RewriteCond %{QUERY_STRING} !^id=.*
RewriteRule .*$ %{REQUEST_URI}%1? [R=301,L]

All of this?

RewriteCond %{QUERY_STRING} ^.+$
RewriteCond %{QUERY_STRING} !^id=
RewriteRule ^(.*)$ $1?%1 [R=301,L]

Tip: throughout your testings, use 302 redirections rather than 301, as 301 redirections are saved by browsers. You are able to finally change to classic 301 when you're done testing.