Sitecore 重定向错误

Sitecore redirect on errors

我知道我可以扩展 Sitecore.Pipelines.HttpRequest.ExecuteRequest 并覆盖 RedirectOnItemNotFound 之类的方法以重定向到我的自定义 404 页面等。我想知道是否有重定向到自定义页面的方法(那会坐在 sitecore 中)除了 404 和 500 之外的所有错误?

我猜 403 错误有一个 RedirectOnNoAccess 方法,但我正在寻找重定向所有错误的方法,如 400、401、403、405 等

Sitecore v7.2

干杯

您绝对可以使用执行请求管道来处理 403 和 401 错误,因为该管道调用得足够早。

市场上已经有一个很好的模块可以做到这一点,您可以根据自己的需要进行调整。

https://marketplace.sitecore.net/en/Modules/Sitecore_Error_Manager.aspx

http://ctor.io/handling-404-and-other-errors-with-sitecore-items/

您不需要扩展 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"/>

更新这些值以指向正确的路径。这可以是 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>

这些可以通过在磁盘上设置项目或静态 HTML 文件的 URL 路径在 Sitecore 中,并且只要结构相同,它就可以在多站点中工作自路径以来的所有站点都可以是相对的。一般建议500页为静态HTML页,否则有无限循环的可能(例如数据库宕机,显示500,从Sitecore获取内容,但数据库宕机...)。

即使您使用错误管理器模块或使用 Sitecore 设置,我也建议您在配置中定义 404 和 500 页面。默认情况下,Sitecore 将仅处理动态和无扩展的 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>

您可以允许 all requests to go through Sitecore 但这似乎有点笨手笨脚,您正在通过额外的管道使其 运行。设置以上将意味着您的静态内容也得到妥善处理。