I have a multiple-site Sitecore project. I know how to deal with error pages via the webconfig's ErrorPage, ItemNotFoundUrl, LayoutNotFoundUrl, LinkItemNotFoundUrl for one site.
However, I'm wanting to display a different error pages for each site. How can I accomplish this?
In any case, you can probably store the URLs of the error pages for each site as attributes of the /configuration/sitecore/sites/site
elements in web.config by extending the Sitecore.Sites.SiteContext
class (see for information about extending existing classes).
The SDN forum post provides more information specifically about the 404 /ItemNotFound
condition, including an example of an extension of Sitecore.SItes.SiteContext
.
For ItemNotFoundUrl
, I think it depends on whether you use an item or a file as the 404 page. If you handle 404 with items, then after the item resolver, add a processor to the httpRequestBegin
pipeline to set the context item to the 404 item for that site if the context item is null. If you use files, then I think override Sitecore.Pipelines.HttpRequest.ExecuteRequest.HandleItemNotFound()
and Sitecore.Resources.Media.MediaRequestHandler.DoProcessRequest()
and update the corresponding references in the web.config file.
For ErrorPage
, I think you would have to override Sitecore.Pipelines.RenderLayout.SecurityCheck.Process
and update the corresponding reference in web.config.
For LayoutNotFoundUrl
, I think you would have to override Sitecore.Pipelines.HttpRequest.ExecuteRequest.HandleLayoutNotFound
, and update the corresponding reference in web.config.
For LinkItemNotFoundUrl
, I would probably add a processor to the renderField pipeline to perform replacement of the default value of the setting with the value that applies for the context site.
If this is a common requirement, we should turn it into a Sitecore Shared Source project, or add it to an existing project.
There's an entry in the SDN scrapbook about how to do this for a multi-site install.
There is a Shared Source project which should fit the requirements is most parts. It's called Sitecore Error Manager.
Hope that helps.