Sitecore Url适用于任何扩展程序

时间:2014-03-30 15:46:26

标签: sitecore sitecore7

在我的网站上,网址甚至在.aspx之后输入内容并提供状态代码200。

例如:以下是包含.aspx和状态码200的普通页面。enter image description here

但即使我有任何随机扩展我有200状态代码,其被假定为404状态代码, enter image description here

任何帮助。

2 个答案:

答案 0 :(得分:3)

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

这是一篇关于创建项目解析器的有用文章:

Thoughts on httpRequestBegin - Custom Item Lookups

在下面的示例中,调用基本进程方法。之后,我们检查上下文项是否满足要求,如果不满足则将其设置为null。 (您需要根据需要实施TemplateIsAPageTypeExtensionIsValid。)

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

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

    }
}

另一种方法可能是这样的,我们将请求的网址与已解析的项目的“理想”网址进行比较:

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;
    }
}

答案 1 :(得分: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")));
}

确保请求的网址首先不是物理文件非常重要。

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