Calling all developers! We invite you to provide your input on Feature Experimentation by completing this brief survey.

 

Deane Barker
May 14, 2010
  11791
(4 votes)

Redirecting to a Simple Address

I was doing an EPiServer demo the other day, and was the showing the “simple address” feature that lets you map pages to simple URLs like “/register” or “/info.”

The client asked if those simple URLs could redirect rather than rewrite.  At the default, if you map a page to a simple address, it’s available both at that URL and its normal URL further down in the tree.  This could be problematic for some organizations to have duplicate content at two URLs.

Just for fun, I set out to solve the problem, and managed to bang it out in a dozen lines of code (most of it error checking).

The timing of where the code runs is a little tricky.  I thought about writing an HttpModule for it, but I needed to have the EPiServer page in hand when the code ran.  So, I need to run this code before anything on the page runs, but after the EPiServer content is mapped to the incoming request.  And it obviously need to run on every page, so I was looking for a way to catch the first moment we’re sure the visitor wants an EPiServer content object.

The method I used was to write a PagePlugin that hooks into the Init event of the page, like this:

public static void Initialize(int optionFlag)
{
    PageBase.PageSetup += new PageSetupEventHandler(PageSetup);
}

public static void PageSetup(PageBase sender, PageSetupEventArgs e)
{
    sender.Init += new EventHandler(CheckForSimpleAddressAccess);
}

What we’ve done with this is hooked an event very early into the page lifecycle.  This runs before anything in the actual page code-behind, so we can essentially pre-empt the entire page execution.

After checking that we’re on a TemplatePage with a valid (non-null) EPiServer page, I check to see if the RawUrl is the same as the simple address for the page.  If it is, I assume they came in on the simple address and redirect them to the real address.  The code for this is pretty simple:

if (String.Concat("/", (sender as PageBase).CurrentPage.Property["PageExternalURL"].ToString()) == HttpContext.Current.Request.RawUrl)
{
    Http.Current.Response.Redirect((sender as PageBase).CurrentPage.StaticLinkURL, true);
}

I took it one step further and added the ability to have a “Redirect to Simple Address” checkbox, so you can select whether a simple address will act as a rewrite or a redirect on a page-by-page basis.  If that doesn’t interest you, it should be pretty simple to comment those lines out and just have this code execute in all cases.

Just a quick warning: this code tested fine, but has not been implemented in any actual environment (I was just solving a problem for fun, remember), so should not be considered production-ready.  If you find any bugs, drop me an email.

Here’s the download.  The zip contains a single class file.  Compile it into your project.

May 14, 2010

Comments

Sep 21, 2010 10:33 AM

Haven't tested it yet but it looks like nice work. :)

Ben Nitti
Ben Nitti Jun 24, 2020 09:41 PM

This would be great.  Ths download link is returning 404. Do you still have this code available?

Please login to comment.
Latest blogs
Image Analyzer with AI Assistant for Optimizely

The Smart Image Analyzer is a new feature in the Epicweb AI Assistant for Optimizely CMS that automates the management of image metadata, such as...

Luc Gosso (MVP) | Jan 16, 2025 | Syndicated blog

How to: create Decimal metafield with custom precision

If you are using catalog system, the way of creating metafields are easy – in fact, you can forget about “metafields”, all you should be using is t...

Quan Mai | Jan 16, 2025 | Syndicated blog

Level Up with Optimizely's Newly Relaunched Certifications!

We're thrilled to announce the relaunch of our Optimizely Certifications—designed to help partners, customers, and developers redefine what it mean...

Satata Satez | Jan 14, 2025

Introducing AI Assistance for DBLocalizationProvider

The LocalizationProvider for Optimizely has long been a powerful tool for enhancing the localization capabilities of Optimizely CMS. Designed to ma...

Luc Gosso (MVP) | Jan 14, 2025 | Syndicated blog

Order tabs with drag and drop - Blazor

I have started to play around a little with Blazor and the best way to learn is to reimplement some old stuff for CMS12. So I took a look at my old...

Per Nergård | Jan 14, 2025

Product Recommendations - Common Pitfalls

With the added freedom and flexibility that the release of the self-service widgets feature for Product Recommendations provides you as...

Dylan Walker | Jan 14, 2025