Nom*_*ler 2 error-handling sitecore sitecore7 sitecore7.2
我知道我可以扩展Sitecore.Pipelines.HttpRequest.ExecuteRequest和覆盖方法,例如RedirectOnItemNotFound重定向到我的自定义 404 页面等。我想知道是否有办法重定向到自定义页面(位于 sitecore 中)以处理除 404 和 500 之外的所有错误?
RedirectOnNoAccess我猜有一种 403 错误的方法,但我正在寻找重定向所有错误的方法,如 400、401、403、405 等。
Sitecore v7.2
干杯
您不需要扩展ExecuteRequest处理器,配置的 Sitecore 部分中有一些设置来处理这些:
<!-- ITEM NOT FOUND HANDLER
Url of page handling 'Item not found' errors
-->
<setting name="ItemNotFoundUrl" value="/sitecore/service/notfound.aspx"/>
<!-- LINK ITEM NOT FOUND HANDLER
Url of page handling 'Link item not found' errors
-->
<setting name="LinkItemNotFoundUrl" value="/sitecore/service/notfound.aspx"/>
<!-- LAYOUT NOT FOUND HANDLER
Url of page handling 'Layout not found' errors
-->
<setting name="LayoutNotFoundUrl" value="/sitecore/service/nolayout.aspx"/>
<!-- ACCESS DENIED HANDLER
Url of page handling 'Acess denied' errors
-->
<setting name="NoAccessUrl" value="/sitecore/service/noaccess.aspx"/>
Run Code Online (Sandbox Code Playgroud)
更新这些值以指向正确的路径。这可以是 Sitecore 项目路径,例如 /errors/404,只要该项目存在于 Sitecore 中。将 url 参数添加到路径中有点烦人,但是如果您想摆脱它,则需要扩展处理器。如果您有一个多站点实现,那么这仍然有效,但您需要确保所有站点的结构都相同,因为您使用的是相对路径。错误管理器模块本质上是这些相同设置的包装器,但更好的是它能够处理多站点并显示错误页面,而无需先进行 302 重定向。
如果您需要处理其他错误,则回退到使用配置中的错误部分来定义这些错误。这些值也可以通过 IIS 设置(尽管它只是更新 web.config)
<system.webServer>
<httpErrors errorMode="DetailedLocalOnly" defaultResponseMode="ExecuteURL" defaultPath="/errors/404">
<remove statusCode="404" subStatusCode="-1" />
<remove statusCode="405" subStatusCode="-1" />
<remove statusCode="500" subStatusCode="-1" />
<error statusCode="404" prefixLanguageFilePath="" path="/errors/404" responseMode="ExecuteURL" />
<error statusCode="405" prefixLanguageFilePath="" path="/errors/405" responseMode="ExecuteURL" />
<error statusCode="500" prefixLanguageFilePath="" path="/errors/static/500.html" responseMode="ExecuteURL" />
</httpErrors>
</system.webServer>
Run Code Online (Sandbox Code Playgroud)
这些可以在 Sitecore 中通过设置项目的 URL 路径或磁盘上的静态 HTML 文件,同样它也可以在多站点中工作,只要所有站点的结构都相同,因为路径可以是相对的。一般建议500页面是静态HTML页面,否则有无限循环的可能(例如数据库宕机,显示500,从Sitecore获取内容,但数据库宕机...)。
即使您使用错误管理器模块,或使用 Sitecore 设置,我也建议您在 config.xml 中定义 404 和 500 页面。默认情况下,Sitecore的将只处理动态和extentionless URL请求,所以如果请求的提出/file.txt,/style.css,/script.js或/document.pdf那么你会得到一个标准的IIS错误页面。
<preprocessRequest>
<processor type="Sitecore.Pipelines.PreprocessRequest.FilterUrlExtensions, Sitecore.Kernel">
<param desc="Allowed extensions (comma separated)">aspx, ashx, asmx</param>
<param desc="Blocked extensions (comma separated)">*</param>
<param desc="Blocked extensions that stream files (comma separated)">*</param>
<param desc="Blocked extensions that do not stream files (comma separated)"></param>
</processor>
</preprocessRequest>
Run Code Online (Sandbox Code Playgroud)
您可以允许所有请求通过 Sitecore,但这似乎有点笨手笨脚,而且您要让它通过其他管道运行。设置上述内容意味着您的静态内容也得到妥善处理。