I’ve recently enhanced a legacy product with support for “custom links” by writing a simple HttpModule.
The module is very simple, it hooks in to each request and check if a mapping exists for the current path.
In order to do this all it needs is a simple map of new to old (legacy) paths.
If a mapping is found, a call to Server.Transfer is done to transfer the request the the correct page.
This worked like a charm until I realized that the AuthenticateRequest was no longer raised when visiting a link that was served using my new module.