我正在尝试将自定义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文档与网址匹配 'http://www.mysite.be/en/facebook'
umbraco尝试使用此xpath匹配它 查询 '/ domainprefixes-被使用的那么I-DO-未工作')
此页面可以通过添加ID来替换为自定义404页面 umbraco文档显示为404页面 /config/umbracoSettings.config文件。只需将id添加到 '/ settings / content / errors / error404'元素。
有关详细信息,请访问有关自定义404的信息 umbraco网站。
和custom给出了这个结果:
它看起来好像他没有走向umbracoSettings来获取我的error404映射。 在4.7中你做了一些改变,你需要通过web.config键激活自定义错误页面吗?找不到页面没有umbraco文档与网址匹配 'http://solex.d01-win-dev.be/non-existing-page.aspx?404;http://solex.d01-win-dev.be:80/en/facebook'
umbraco尝试使用此xpath匹配它 查询 '/ domainprefixes-被使用的那么I-DO-未工作')
此页面可以通过添加ID来替换为自定义404页面 umbraco文档显示为404页面 /config/umbracoSettings.config文件。只需将id添加到 '/ settings / content / errors / error404'元素。
有关更多信息,请访问umbraco网站上有关自定义404的信息。
答案 0 :(得分:5)
对于那些感兴趣的人,或者可能有同样问题的人 它没有任何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
}
希望你们中任何一个人在遇到同样情况时都可以使用它。