A few months ago I switched my blogging engine from WordPress to DasBlog, and was left with a pile of broken post links. The WordPress format of formatting URLs, such as cptloadtest.com/?p=56, no longer applied; DasBlog has its own way of building the URL: cptloadtest.com/2006/05/31/VSNetMacroCollapseAll.aspx. Other people, with links to my posts on their own blogs, and search engines, with search results pointing to the old format, no longer directed people to the proper page. Fortunately, the old WordPress way directed users to the domain root, so they saw the main page instead of a 404, but what I really needed was a way to get users to the content they came for. But, I wanted a way that didn't involve customizing DasBlog code.
Part 1 discusses some client-side options for redirecting traffic. As a developer, I would only need to add some quick JavaScript or HTML to my pages to reroute traffic, but I wanted a better way. I wanted Google's links to be updated, rather than just for the link to correctly route. I want a solution that worked without JavaScript. I wanted a solution that didn't download the page twice, as any client-side processor would do. I wanted the HTTP 301.
HTTP 301, Move Permanently, is a server-side redirection of traffic. No client-side processing is involved. And Google recognizes that this is a permanent redirect, as it's name implies, so the Google result link is updated to the new URL. But since this is a server-side process, and I don't have full access to IIS settings with my hosting provider, I needed some code.
response.StatusCode = 301; response.AddHeader("Location", "http://www.cptloadtest.com"); response.End();
You may have noticed that, unlike the title of this blog post, I did not use a URL rewrite. HTTP 301 (and 302) redirects are HTTP Response Codes that are returned to the client browser, and the client then requests the new URL. A URL Rewrite leaves the original URL in place, and renders a different page instead, without visibility to the client browser or end-user. If I were to URL rewrite my blog from page1.aspx to page2.aspx, the URL in your address bar would still list page1.aspx, even though the content was from page2.aspx. The end-user (and the search engine) never know about the URL for page2.aspx. However, with a HTTP redirect, the content and the address bar would both be page2.aspx.
I ran through Google to see if anyone had solved this problem in the past. I came across a Scott Hanselman post on HTTP 301, which mentions a fantastic drop-in redirect module by Fritz Onion. I was elated when I found this module, and it was very easy to implement. Drop the assembly into your application's bin, add a few lines into the web.config, and enjoy redirection bliss. The module also supports both HTTP 302 and HTTP 301 redirects through the "permanent" attribute in the redirection rules.
<?xml version="1.0"?> <configuration> <configSections> <section name="redirections" type="Pluralsight.Website.XmlSerializerSectionHandler, redirectmodule" /> </configSections> <!-- Redirect Rules --> <redirections type="Pluralsight.Website.redirections, redirectmodule"> <!-- Wordpress Post Redirects //--> <add targetUrl="/default\.aspx\?p=86" destinationUrl="/2007/09/22/ManagingMultipleEnvironmentConfigurationsThroughNAnt.aspx" permanent="true" /> <add targetUrl="/default\.aspx\?p=74" destinationUrl="/2007/02/09/Flash8DepthManagerBaffledByThoseWithoutDepth.aspx" permanent="true" /> <add targetUrl="/default\.aspx\?p=72" destinationUrl="/2006/10/20/IE7Released.aspx" permanent="true" /> <add targetUrl="/default\.aspx\?p=70" destinationUrl="/2006/10/17/ClearingFlashIDEWSDLCache.aspx" permanent="true" /> <add targetUrl="/default\.aspx\?p=69" destinationUrl="/2006/10/10/CruiseControlNetV11ReleasedOct1.aspx" permanent="true" /> <!-- ...More Redirects --> </redirections> <system.web> <httpModules> <add name="RedirectModule" type="Pluralsight.Website.RedirectModule, redirectmodule" /> </httpModules> </system.web> </configuration>
The entire implementation took only a few minutes. It seemed like it took longer to upload the changes to the blog than it did to make the local edits. The solution is also very clean, as it required no modification to the existing application beyond integrating the configuration blocks into the web.config. Blog traffic will now seamlessly redirect from links that use the old WordPress URL to post that use the new DasBlog URL. Search Engines also update their links, and the page ranking for each post isn't lost into the ether just because the URL changed. All is well with the world, again.
Next up: Part 3. URL redirection also plays a role in Search Engine Optimization. In Part 3, I will go over some ways that you can use HTTP redirects to improve your search engine listings, as well as discuss some improvements I made to Fritz Onion's redirect module in the name of SEO.
Remember Me