As for the redirect "issue" of the parameter remaining in the new/redirected url, the htaccess command "Redirect" does not strip the parameter from the url. Therefore to remove it via htaccess, would be better to use "RewriteRule" which also can be written to only redirect id=25 and not include any other page that starts with 25.
Code:
RewriteRule ^index\.php?main_page=page&id=25$ /blog/table-tennis-rules? [L, R=301]
As to temporarily using 302 versus 301, imagine this. An attempt to redirect is entered. A customer goes to the original address. The attempt fails because it was wrong. The customer's browser has been told that the address attempted has been permanently moved to some other non-existent location via cache. How do you tell them to clear their cache? Did your heaers include anything that would pull a new reference/location after some set time out? Does their browser support such a request?
All because wanted to test something...
It's akin to testing that the SSL certificate has been properly installed before changing a site to https and then finding out that it wasn't properly installed and shouldn't have been activated (yet). Why do something as a self test that has to be undone by others when it is possible to temporarily test and then when successful, "lock" it in.
Bookmarks