【问题标题】:add custom 404 pages in umbraco 4.7在 umbraco 4.7 中添加自定义 404 页面
【发布时间】:2011-08-03 15:47:09
【问题描述】:

我正在尝试将自定义 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 页面。

所以,我尝试了this topic 中的解决方案 passThrough 和自定义解决方案似乎都不起作用

passThrough 给出了这个:

找不到页面没有 umbraco 文档与 url 匹配 'http://www.mysite.be/en/facebook'

umbraco 尝试使用这个 xpath 来匹配它 查询'/domainprefixes-are-used-so-i-do-not-work')

这个页面可以通过添加 id 替换为自定义 404 页面 umbraco 文档显示为 404 页面 /config/umbracoSettings.config 文件。只需将 id 添加到 '/settings/content/errors/error404' 元素。

有关详细信息,请访问有关自定义 404 的信息 umbraco 网站。

自定义给出了这个结果:

找不到页面没有 umbraco 文档与 url 匹配 'http://solex.d01-win-dev.be/non-existing-page.aspx?404;http://solex.d01-win-dev.be:80/en/facebook'

umbraco 尝试使用这个 xpath 来匹配它 查询'/domainprefixes-are-used-so-i-do-not-work')

这个页面可以通过添加 id 替换为自定义 404 页面 umbraco 文档显示为 404 页面 /config/umbracoSettings.config 文件。只需将 id 添加到 '/settings/content/errors/error404' 元素。

有关更多信息,请访问 umbraco 网站上有关自定义 404 的信息。

在我看来,他似乎没有前往 umbracoSettings 来获取我的 error404 映射。 您需要通过 web.config 键激活自定义错误页面在 4.7 中是否发生了变化?

【问题讨论】:

    标签: error-handling umbraco


    【解决方案1】:

    对于那些感兴趣的人,或者可能曾经有同样问题的人 无需任何 web.config 更改即可解决。

    但是通过使用我们添加到 404handlers.config 的自定义 404 处理程序 像这样

      <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
        }
    

    希望你们中的任何人都能在遇到同样情况时使用它。

    【讨论】:

    • 感谢这项工作,除了在 umbraco 4.7 中,errorPage 节点被称为 error404(只需在任何地方搜索并将“errorPage”替换为“error404”就可以了。
    • 顺便说一句,这将在 umbraco 4.7.1.1 中修复
    • 附言。还需要将 GetKeysAsNode 调用改为:.GetKeyAsNode("/settings/content/errors");
    • 这对我不起作用。我在 default.aspx 中收到 500 错误(即网站崩溃),这与尝试设置当前上下文两次有关。顺便说一句,我正在使用 umbraco 6,但仍然遇到这个问题。这不是应该在 4.x 分支的某个地方修复的吗?
    猜你喜欢
    • 1970-01-01
    • 2011-04-06
    • 2018-11-16
    • 1970-01-01
    • 2019-11-18
    • 2010-11-04
    • 2012-10-26
    • 2011-08-05
    相关资源
    最近更新 更多