2013-09-11 6 views
1

Я использую следующую реализацию для обработки 404 в Sitecore мультисайтового раствора:Sitecore обычай 404 перенаправлять

В пользовательской реализации трубопровода ExecuteRequest,

protected override void RedirectOnItemNotFound(string url) 
     { 
      var context = HttpContext.Current; 

      try 
      { 
       // Request the NotFound page 
       var domain = context.Request.Url.GetComponents(
        UriComponents.Scheme | UriComponents.Host, 
        UriFormat.Unescaped); 

       string content; 

       using(var webClient = new WebClient()) 
       { 
        content = webClient 
         .DownloadString(string.Concat(domain, url)); 
       } 

       // The line below is required for IIS 7.5 hosted 
       // sites or else IIS is gonna display default 404 page 
       context.Response.TrySkipIisCustomErrors = true; 
       context.Response.StatusCode = 404; 
       context.Response.Write(content); 
      } 
      catch (Exception ex) 
      { 
       Log.Error(string.Format("Failed on URL: {0}. Falling back to default redirection behaviour. Reason for error {1}", url, ex), ex); 

       // Fall back to default behavior on exceptions 
       base.RedirectOnItemNotFound(url); 
      } 

      context.Response.End(); 
     } 

Теперь, как вы можете видеть, если страница 404 (т. е. нет 404 страницы (как определено в параметре ItemNotFound Sitecore в web.config для сайта), то я делаю base.RedirectOnItemNotFound, который пытается сбросить 404, снова возвращаясь к моему пользовательскому обработчику 404 снова и, следовательно, он попадает в цикл перенаправления.

Итак, если кто-то забывает добавить 404 страницу на один из сайтов, тогда он сбрасывает все остальные сайты и переходит в тупик.

Мой вопрос: какой был бы лучший способ справиться с этим сценарием, когда на одном из сайтов нет страницы 404?

Re-throw исключение вместо base.Redirect ..?

Приветствие

ответ

1

В вашем сценарии я предлагаю вам иметь глобальную страницу 404 для всех сайтов.

Если у вас нет на сайте 404 страницы, вы должны показывать контент с этой глобальной страницы.

При создании сайтов в структуре Sitecore вы можете создавать шаблоны филиалов, и вы можете добавить 404 страницу для всех сайтов.

Также вы можете исправить безопасность на каждые 404 страницы для всех сайтов. Только некоторые специальные роли (админы) удалят 404 страницы.

+0

Предположим, что мы не можем пойти на глобальную страницу 404 по уважительной причине.В этом случае мне интересно узнать, что было бы лучшим способом сделать его неудачным изящно, не входя в цикл перенаправления. – user446923

+0

Также, если у вас есть предложения по улучшению моего исправленного решения, взятого из нескольких различных статей в блогах выше, это было бы здорово. – user446923

+1

http://marketplace.sitecore.net/en/Modules/Sitecore_Error_Manager.aspx это хороший менеджер ошибок для Sitecore, вы можете посмотреть здесь –

0

Я думаю, что в случае, если сайт конкретной страницы ошибки не установлены, то лучше всего было бы перенаправить его на основную страницу NotFound Sitecore с URL /sitecore/service/notfound.aspx

Лучше вещь это будет в самом диспетчере IIS. шаги заключаются в следующем:

  1. Goto IIS Manager, выберите узел в левой панели выберите страницы ошибок модуля.
  2. Выберите страницу 404 «Ошибка», нажмите «Изменить» на панели «Действия».
  3. Выберите «Выполнить адрес» и укажите URL-адрес, который будет /sitecore/service/notfound.aspx
  4. Снова на панели «Действия» нажмите «Редактировать настройки параметров» и убедитесь, что на нем установлена ​​страница «Пользовательская ошибка». (что, я думаю, должно быть, так как в вашем случае у вас уже есть собственные страницы ошибок)

Насколько мне известно, это должно решить вашу проблему.

Дайте мне знать, что произойдет. Если вам нужно посмотреть, как делать изменения на странице ошибок в диспетчере IIS, обратитесь к аналогичному вопросу, на который я ответил некоторое время назад (Sitecore - Handle 500 errors separately per site in multisite setup)

Надеюсь, что этот вход поможет вам!

С уважением, Варуна Shringarpure

Смежные вопросы