A critical vulnerability was discovered in React Server Components (Next.js). Our systems remain protected but we advise to update packages to newest version. Learn More

Can EPiServer use the short URL for a page in all situations?

Vote:
 

Is it possible to get CMS 6 to use the short URL for a page everywhere that page is linked?  My client has some legacy SEO they're bringing over, and they want Drupal-esque funtionality -- they want to set the short URL for a page and for that become the "URL of record" which is used in all navigation to that page.

Possible?  I know I could roll my own nav controls, but I was wondering if I could override something in the URL rewriter instead to make this behavior more core.

#58818
May 07, 2012 18:16
Vote:
 

So, I think I may have done this.  It seems to work anyway.  I'd be interested in comments -- did I do this right?

using System;
using System.Collections.Generic;
using System.Collections.Specialized;
using System.Linq;
using System.Web;
using EPiServer.Configuration;
using EPiServer.Globalization;
using EPiServer.Core;

namespace EPiServer
{
    public class ShortUrlRewriteProvider : EPiServer.Web.FriendlyUrlRewriteProvider
    {
        protected override bool ConvertToExternalInternal(UrlBuilder url, object internalObject, System.Text.Encoding toEncoding)
        {
            var pageRef = internalObject as PageReference;

            if (pageRef == null || pageRef == PageReference.EmptyReference)
            {
                return base.ConvertToInternalInternal(url, ref internalObject);
            }

            // Get the page
            var pageData = DataFactory.Instance.GetPage(pageRef);

            // Does this page have a simple address?
            if (pageData.Property["PageExternalURL"] != null && pageData.Property["PageExternalURL"].Value != null)
            {
                // "Reset" the path to be nothing but the raw site URL (so, essentially just the protocol and the domain)
                url.Uri = Settings.Instance.SiteUrl;

                // Now set the path to be just the simple URL
                url.Path = String.Concat("/", pageData.Property["PageExternalURL"].Value.ToString());
                
                return true;
            }
     
            // No simple address, just handle normally
            return base.ConvertToExternalInternal(url, internalObject, toEncoding);
        }

    }
}

    

#58819
May 07, 2012 20:32
This thread is locked and should be used for reference only. Please use the Episerver CMS 7 and earlier versions forum to open new discussions.
* You are NOT allowed to include any hyperlinks in the post because your account hasn't associated to your company. User profile should be updated.