在我的网站上,网址甚至在.aspx之后输入内容并提供状态代码200。
例如:以下是包含.aspx和状态码200的普通页面。
但即使我有任何随机扩展我有200状态代码,其被假定为404状态代码,
任何帮助。
答案 0 :(得分:3)
Sitecore在解析URL时非常慷慨。如果要强制执行正确的扩展,可以创建自定义Item Resolver
,以确保如果URL的扩展名不正确,则process
方法中的上下文项保持为空。
这是一篇关于创建项目解析器的有用文章:
Thoughts on httpRequestBegin - Custom Item Lookups
在下面的示例中,调用基本进程方法。之后,我们检查上下文项是否满足要求,如果不满足则将其设置为null。 (您需要根据需要实施TemplateIsAPageType
和ExtensionIsValid
。)
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,上下文项应该是未找到的项目。可以扩展代码以检查点后面的内容,看它是否是有效的扩展名。