2014-03-30 49 views
2

在我的网站,网址的正在努力,即使进入的.aspx后的东西,并给予居留制码200Sitecore的网址与任何扩展

例如:下面是的.aspx和状态代码正常页面200 enter image description here

但是,即使我有任何随机扩展我得到这suppossed是404个状态码200状态码, enter image description here

任何帮助。

回答

3

Sitecore解析URL时非常慷慨。如果要强制执行正确的扩展名,则可以创建一个自定义Item Resolver,以确保如果URL具有不正确的扩展名,则process方法中的上下文项保留为空。

下面是关于创建项目解析器的实用文章:

Thoughts on httpRequestBegin - Custom Item Lookups

在我下面的实例中,碱处理的方法调用。之后,我们检查上下文项是否符合要求,如果不符合则将其设置为空。 (您需要实现TemplateIsAPageTypeExtensionIsValid,你认为合适。)

public class CustomItemResolver : HttpRequestProcessor 
{ 
    public override void Process(HttpRequestArgs args) 
    { 
     base.Process(args); 

     if(Context.Item != null && TemplateIsAPageType() && !ExtensionIsValid()) 
     { 
      Context.Item = null; 
     } 

    } 
} 

另一种做法可能是这样的,在这里我们比较与解决项目的“理想”的URL请求的URL:

public class CustomItemResolver : HttpRequestProcessor 
{ 
    public override void Process(HttpRequestArgs args) 
    { 
     base.Process(args); 

     if(Context.Item == null) 
      return; 

     var requestUrl = HttpContext.Current.Request.RawUrl; 
     var idealUrl = LinkManager.GetItemUrl(Context.Item); 

     if(requestUrl != idealUrl) 
      Context.Item = null; 
    } 
} 
+0

结果不一样。 – Sam

+0

你试过了哪一个?如果您尝试了第二个示例,那么调试时'requestUrl'和'idealUrl'的值是多少? –

+0

页面重定向到404,但状态代码没有变化 – Sam

0

当试图解析某个项目时,Sitecore会跳过网址中最后一个点“。”后的所有内容。

这由类Sitecore.Web.RequestUrl完成,该类具有名为ItemPath的属性。

此属性尝试创建从请求的URL中的项目的有效路径。无法重写此属性。


如果由于某种原因想要Sitecore返回一个404状态码,如果一个项目被请求带有文件扩展名,比如.aspx,你可以在404找不到的项目解析器中做这样的事情。

看到这篇文章http://laubplusco.net/handling-404-sitecore-avoid-302-redirects/下面的方法扩展了文章中显示的方法。

protected virtual bool IsValidContextItemResolved(string filePath) 
{ 
    if (Context.Item == null || !Context.Item.HasContextLanguage()) 
    return false; 
    if (filePath.Contains(".") && !RequestIsForPhysicalFile(filePath)) 
    return false; 
    return !(Context.Item.Visualization.Layout == null 
    && string.IsNullOrEmpty(WebUtil.GetQueryString("sc_layout"))); 
} 

重要的是要确保所请求的url不是针对物理文件。

这是通过检查args.Url.filepath未映射到物理文件来完成的。 我在这里展示的规则说如果一个项目已被解析并且文件路径包含一个点,那么请求的url应该返回一个404,并且该上下文项目应该是未找到的项目。代码可以扩展到检查点后面的内容,看看它是否是有效的扩展名。