добавить пользовательские 404 страницы в umbraco 4.7 - PullRequest
1 голос
/ 03 августа 2011

Я пытаюсь добавить пользовательские 404 страницы в Umbraco хотя я заставил их работать в нескольких проектах, в этом umbraco 4.7 это не работает.

итак, что у меня есть, мульти-сайт каждый с несколькими языками.

мой umbracoSettings содержит это:

    <errors>
      <error404>
        <errorPage culture="default">1842</errorPage>
        <errorPage culture="en-GB">1842</errorPage>
        <errorPage culture="nl-BE">1843</errorPage>
        <errorPage culture="fr-BE">1844</errorPage>
      </error404>
    </errors>

так же, как и в других проектах хотя я продолжаю получать страницу IIS 404.

Итак, я попробовал решение в этой теме кажется, что и passThrough, и пользовательское решение не работают

PassThrough дает это:

Страница не найдена. Umbraco документ не соответствует URL «http://www.mysite.be/en/facebook'

umbraco попытался сопоставить его с помощью этого xpath запрос '/ domainprefixes-которые-подержанными так я-Do-Not-работа')

Эта страница может быть заменена пользовательской страницей 404 путем добавления идентификатора документ Umbraco для отображения в виде страницы 404 в /config/umbracoSettings.config файл. Просто добавьте идентификатор к Элемент '/ settings / content / errors / error404'.

Для получения дополнительной информации, посетите информацию о пользовательских 404 на веб-сайт Umbraco.

и обычай дает такой результат:

Страница не найдена. Umbraco документ не соответствует URL 'http://solex.d01 -win-dev.be / несуществующий-page.aspx 404; http://solex.d01 -win-dev.be: 80 / о / facebook

umbraco попытался сопоставить его с помощью этого xpath запрос '/ domainprefixes-которые-подержанными так я-Do-Not-работа')

Эта страница может быть заменена пользовательской страницей 404 путем добавления идентификатора документ Umbraco для отображения в виде страницы 404 в /config/umbracoSettings.config файл. Просто добавьте идентификатор к Элемент '/ settings / content / errors / error404'.

Для получения дополнительной информации, посетите информацию о custom 404 на веб-сайте umbraco.

мне кажется, что он не идет к umbracoSettings, чтобы получить мои отображения ошибок 404. В 4.7 что-то изменилось, что нужно активировать пользовательские страницы ошибок через ключ web.config?

1 Ответ

5 голосов
/ 09 августа 2011

для тех, кому интересно, или у кого могут быть те же проблемы это было решено без каких-либо изменений web.config.

, но с помощью пользовательского обработчика 404 мы добавили к 404handlers.config как это

  <notFound assembly="ProjectLibrary" type="Custom404"/>

и добавление страниц с ошибками в umbracoSettings.config как это

  <errors>
      <error404>
        <errorPage culture="default">1842</errorPage>
        <errorPage culture="en-GB">1842</errorPage>
        <errorPage culture="nl-BE">1843</errorPage>
        <errorPage culture="fr-BE">1844</errorPage>
      </error404>
    </errors>

пользовательский обработчик выглядит так:

    public class Custom404 : INotFoundHandler
    {
        #region INotFoundHandler Members

        private int _redirectID = -1;

        public bool CacheUrl
        {
            get { return false; }
        }

        public bool Execute(string url)
        {
            //Variable for keeping track whether the handling of the request was successful
            bool _success = false;
            XmlNode error404Node = umbraco.UmbracoSettings.GetKeyAsNode("/settings/content/errors/error404");

            // _redirectID =;
            XmlNode cultureErrorNode;
            try
            {
                HttpContext.Current.Trace.Write("test", HttpContext.Current.Request.ServerVariables["SERVER_NAME"] + "/" + url);
                string sDomein = findDomein(HttpContext.Current.Request.ServerVariables["SERVER_NAME"] + "/" + url);
                HttpContext.Current.Trace.Write("test", sDomein);
                if (Domain.Exists(sDomein))
                {
                    Domain d = Domain.GetDomain(sDomein);
                    // test if a 404 page exists with current culture
                    HttpContext.Current.Trace.Write("test", d.Language.CultureAlias);
                    cultureErrorNode = error404Node.SelectSingleNode(String.Format("errorPage [@culture = '{0}']", d.Language.CultureAlias));
                    if (cultureErrorNode != null && cultureErrorNode.FirstChild != null)
                    {
                        _redirectID = int.Parse(cultureErrorNode.FirstChild.Value);
                    }
                    else
                    {
                        cultureErrorNode = error404Node.SelectSingleNode("errorPage [@culture = 'default']");
                        if (cultureErrorNode != null && cultureErrorNode.FirstChild != null)
                            _redirectID = int.Parse(cultureErrorNode.FirstChild.Value);
                    }
                }
                else
                {
                    cultureErrorNode = error404Node.SelectSingleNode("errorPage [@culture = 'default']");
                    if (cultureErrorNode != null && cultureErrorNode.FirstChild != null)
                        _redirectID = int.Parse(cultureErrorNode.FirstChild.Value);
                }
            }
            catch
            {
                cultureErrorNode = error404Node.SelectSingleNode("errorPage [@culture = 'default']");
                if (cultureErrorNode != null && cultureErrorNode.FirstChild != null)
                    _redirectID = int.Parse(cultureErrorNode.FirstChild.Value);
            }
            _success = true;
            return _success;
        }


        public string findDomein(string sUrl)
        {
            if (sUrl.Contains("/"))
            {
                if (Domain.Exists(sUrl))
                {
                    return sUrl;
                }
                else
                {
                    sUrl = sUrl.Substring(0, sUrl.LastIndexOf("/"));
                    return findDomein(sUrl);
                }
            }
            else
            {
                return sUrl;
            }

        }

        public int redirectID
        {
            get
            { return _redirectID; }
        }

        #endregion
    }

надеюсь, что любой из вас сможет использовать его, когда окажетесь в той же ситуации.

...