views:

43

answers:

3

This is the scenario: I have a list of about 5000 URLs which have already been published to various customers. Now, all of these URLs' location has changed on my server side. The server is still the same though. This is a ASP.NET website with .NET3.5/C#.

My requirement is : Though the customers use the older source URL they should be redirected to the new URL without any perceived change or intermediate redirection message etc.

I am trying to make sense of the whole scenario:

  1. Where would I put the actual mapping of Old URL to New URL -- in a database or some config. file or is there a better option?

  2. How would I actual implement a redirect:
    Should I write a method with Server.Transfer ot Response.Redirect?
    And is there a best practice to it like - placing the actual re-routing in HTTPModules..or is it Application_BeginRequest?

I am looking to achieve with a best-practice compliant methodology and very low performance degradation, if any.

+2  A: 

If your application already uses a database then I'd use that. Make the old URL the primary key and lookups should be very fast. I'd personally wrap the whole thing in .NET classes that abstracts it and allow you to create a Dictionary<string,string> of all the URLs which can be loaded into memory from the DB and cached. This will be even faster.

Definitely DON'T use Server.Transfer. Instead you should do a 301 Permanently Moved redirect. This will let search engines know to use the new URL. If you were using NET 4.0 you could use the HttpResponse.RedirectPermanent method. However, in earlier versions you have to set the headers yourself - but this is trivial.

Dan Diplo
+1 for Don't use `Server.Transfer`, doing that would return new content for the old URL, which you definitely don't want.
EliThompson
@Dan Diplo Thanks for rthe inputs...but where would the actual routing take place or should be placed? Application_BeginRequest?!
GilliVilla
You'd want to do the routing using an HttpModule - see http://support.microsoft.com/kb/307996
Dan Diplo
A: 

Keep the data in a database, but load into ASP.NET cache to reduce access time.

del.ave
A: 

You definitely want to use HTTPModules. It's the accepted practice, and having recently tried to do it inside Global.asax, I can tell you that unless you want to do only the simplest kind of stuff (i.e. "~/mypage.aspx/3" <-> "~/mypage.aspx?param1=3) it's much more complicated and buggy than it seems.

In fact, I regret even trying to roll my own URL rewriting solution. It's just not worth it if you want something you can depend on. Scott Guthrie has a very good blog post on the subject, and he recommends UrlRewriter.net or UrlRewriting.net as a couple of free, open-source URL rewriting solutions.

Good luck.

Justin Morgan
I am looking at URL redirection not rewriting or permalinking.
GilliVilla