meta http-equiv="refresh approach and lastly using a 404 which can work out where you wanted to get to and then forward you on.
I can see that a 301 (and a 302) potentially may never pass the original HTML page to the client (it can be handled on the server, such as in IIS or Apache and when it finds the 'new' page to show, only that page is passed to the browser) where as the meta-refresh requires the page to be dished to the browser and then an action takes place (the forwarding).
However, the 404 page may also never be sent to the browser! Consider find a page, IIS can't find it, so dish out the 404. The 404 has some server code, which contains the forwarding logic. Hence, only 1 page will be sent to the browser.
Is the fact the server only returns 1 result (1 HTML page) that makes it a permanent 301 and so either using URL re-writing or the above example of the 404 are identical (identical in that it's treated as a 301)?
If this is the case, how does this actually differ from a 302? Do we need to add some meta information to explain it's a 302 or 301? My research suggests not.