We use the PURL server from OCLC. It allows for simple redirects of a purl to another URL, and "partial redirects" that allow a base portion of a PURL to be replaced with a different base portion, passing the remainder of the PURL as a parameter to a second service.
One drawback of this server is that it is very difficult to delete or modify entries (e.g., to correct typos). People have considered hacking the database to do this, but we do not know whether anyone has been successful. We've never considered the benefits to be worth the anticipated effort. Details: