我在web.config中设置了一个自定义管道来处理403& 404消息传递和行为。代码看起来像这样......
public class NotFoundProcessor : Sitecore.Pipelines.HttpRequest.HttpRequestProcessor
{
public override void Process(Sitecore.Pipelines.HttpRequest.HttpRequestArgs args)
{
//handle 404 & 403 processing of the requested item
}
}
适用于任何"页面"这是要求的。
但是,媒体库项目似乎不会被该管道处理。我在http://sdn.sitecore.net/upload/sitecore6/handling_http_404_a4.pdf
中找到了这个文字如果IIS使用ASP.NET来处理请求,并且没有处理器中止 httpRequestBegin管道,与请求的URL不对应 到Sitecore媒体项目,上下文站点中的内容项目,或 磁盘上的文件,然后Sitecore激活该值指定的URL / configuration / sitecore / settings / setting元素的属性 web.config,名称为ItemNotFoundUrl。
这表示媒体项的处理方式不同,但我找不到任何在管道中捕获媒体项请求的引用。有没有办法做到这一点,或者另一种解决方法是允许我的自定义403/404处理媒体项目?
谢谢, 萨德
答案 0 :(得分:0)
您是对的,媒体由不同的处理器处理,该处理器在<system.webServer><handlers>
的{{1}}和<system.web><httpHandlers>
中定义。媒体项的请求不会通过常用的Sitecore管道。
具体的处理程序是:
web.config
如果您需要添加自己的自定义逻辑,然后将其添加到<add verb="*" path="sitecore_media.ashx" type="Sitecore.Resources.Media.MediaRequestHandler, Sitecore.Kernel" name="Sitecore.MediaRequestHandler"/>
,则可以使用dotPeek decompiler检查当前逻辑。
说完所有这些后,如果您正确设置了权限,Sitecore应该开箱即用。应将用户重定向到“拒绝访问”页面,或者在DoProcessRequest()
中设置的任何内容(您可以将其更改为登录页面)。
确保您已经破坏了正确用户的继承,通常是Settings.NoAccessUrl
(而不是extranet\Anonymous
),但如果您更改了default/Anonymous
元素中的域,那么相应的{{ 1}}用户。