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>
- http://www.iis.net/configreference/system.webserver/httperrors
- https://msdn.microsoft.com/en-us/library/ms690497(v=vs.90).aspx
这些可以通过在磁盘上设置项目或静态 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 但这似乎有点笨手笨脚,您正在通过额外的管道使其 运行。设置以上将意味着您的静态内容也得到妥善处理。
我知道我可以扩展 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>
- http://www.iis.net/configreference/system.webserver/httperrors
- https://msdn.microsoft.com/en-us/library/ms690497(v=vs.90).aspx
这些可以通过在磁盘上设置项目或静态 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 但这似乎有点笨手笨脚,您正在通过额外的管道使其 运行。设置以上将意味着您的静态内容也得到妥善处理。