Просто добавить к Йенс Миккельсен 2-й пункт в своем ответе.
Создайте свой собственный HttpRequestProcessor, как это:
public class CustomResolver : HttpRequestProcessor
{
public override void Process(HttpRequestArgs args)
{
Assert.ArgumentNotNull(args, "args");
//make sure you are in the right context, and that the pipeline hasn't resolved an item yet
if ((Sitecore.Context.Item == null && Sitecore.Context.Database != null)
&& (Sitecore.Context.Database.Name != "core") )
{
var requestUrl = args.Context.Request.RawUrl; // e.g. domain.com/news/newsarchive/2008
//Do your magic here
Item item = ResolveItemOnUrl(requestUrl);
if (item != null)
{
Sitecore.Context.Item = item;
}
}
}
}
И добавьте это к HttpRequestPipeline после ItemResolver
<pipelines>
<httpRequestBegin>
<processor patch:after="*[@type='Sitecore.Pipelines.HttpRequest.ItemResolver, Sitecore.Kernel']" type="yourNameSpace.CustomResolver, yourNameSpace" />
</httpRequestBegin>
</pipelines>
Это примерно то же самое, что Sitecore использует в Sitecore Ecommerce Services (SES) для разрешения продуктов.