让Sitecore回复404错误代码,this blog似乎是引用最多的,其中处理器添加到httpRequestBegin
管道,StatusCode
设置为404响应是从单独请求的结果中写出的。像这样:
// Request the NotFound page
string domain = context.Request.Url.GetComponents(UriComponents.Scheme | UriComponents.Host, UriFormat.Unescaped);
string content = Sitecore.Web.WebUtil.ExecuteWebPage(string.Concat(domain, url));
// Send the NotFound page content to the client with a 404 status code
context.Response.TrySkipIisCustomErrors = true;
context.Response.StatusCode = 404;
context.Response.Write(content);
此解决方案对我来说效果不佳,因为当服务器发出第二个获取404内容的请求时,cookie /安全性和IP检测会丢失。
经过Sitecore的支持,我们想出了这段代码(只是一个简单的样本):
public class MyHttpBeginRequestProcessor : Sitecore.Pipelines.HttpRequest.HttpRequestProcessor
{
public override void Process(Sitecore.Pipelines.HttpRequest.HttpRequestArgs args)
{
if (Sitecore.Context.Item != null
|| Sitecore.Context.Site == null
|| Sitecore.Context.Database == null)
{
return;
}
Sitecore.Data.Database master = Sitecore.Configuration.Factory.GetDatabase("master");
Sitecore.Context.Item = master.GetItem("/sitecore/content/home");
Sitecore.Context.Items["Set404"] = "true";
}
}
public class MyHttpEndRequestProcessor : Sitecore.Pipelines.HttpRequest.HttpRequestProcessor
{
public override void Process(Sitecore.Pipelines.HttpRequest.HttpRequestArgs args)
{
if (Sitecore.Context.Items.Contains("Set404"))
{
args.Context.Response.StatusCode = 404;
}
}
}
然后你在httpRequestEnd
管道和httpRequestBegin
管道中添加了一个新处理器,如下所示:
<configuration xmlns:patch="http://www.sitecore.net/xmlconfig/">
<sitecore database="SqlServer">
<pipelines>
<httpRequestBegin>
<processor type="NewInstance3.Pipelines.MyHttpBeginRequestProcessor, NewInstance3" patch:after="processor[@type='Sitecore.Pipelines.HttpRequest.ItemResolver, Sitecore.Kernel']"/>
</httpRequestBegin>
<httpRequestEnd>
<processor type="NewInstance3.Pipelines.MyHttpEndRequestProcessor, NewInstance3"/>
</httpRequestEnd>
</pipelines>
</sitecore>
</configuration>
这完全适用于我的本地工作站(Win7 x64);但是,当我将该站点复制到Win2008 x64服务器时,将显示默认的IIS 404错误页面。在httpRequestEnd
管道上将StatusCode设置为404会导致IIS显示其404错误,而不是我在httpRequestBegin
管道中设置的Sitecore项。
Sitecore支持说操作系统无关紧要,它适用于Win2008服务器,但我尝试了4台独立的Win2008机器,我尝试过Sitecore 7.2 rev的vanilla安装。 141226并且每次都显示默认的IIS 404错误。
有什么想法吗?感谢
答案 0 :(得分:3)
将以下内容添加到您的代码中:
context.Response.TrySkipIisCustomErrors = true;