2014-03-30 5 views
2

가 해당 URL의도 작업에서 .aspx 이후에 뭔가를 입력하고 staus 코드를 200Sitecore URL 내 웹 사이트에

예를 제공하는 모든 확장과 함께 작동 : 아래에서 .aspx 및 상태 코드와 일반 페이지는 200 enter image description here

는 그러나 심지어 나는 404 상태 코드로 suppossed 200 상태 코드, enter image description here

도움이 가지고있는 임의의 확장자를 가지고있다.

답변

3

Sitecore는 URL을 확인할 때 매우 관대합니다. 올바른 확장명을 적용하려면 URL에 잘못된 확장명이 있으면 process 메서드에서 컨텍스트 항목이 null로 유지되도록 사용자 지정 Item Resolver을 만들 수 있습니다.

여기에 아이템 해결 프로그램 작성에 도움이되는 기사의 아래에 내 예에서

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

    } 
} 

는 또 다른 방법이 같은 수 있습니다, 우리가 해결 항목의 '이상적인'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는 항목을 해결할 때 url에서 마지막 점 "."다음의 모든 항목을 건너 뜁니다.

이 작업은 ItemPath라는 속성이있는 Sitecore.Web.RequestUrl 클래스에 의해 수행됩니다.

이 속성은 요청 된 URL의 항목에 대한 유효한 경로를 만들려고합니다. 이 속성을 재정의하는 것은 불가능합니다.

Sitecore에서 .aspx와 같은 파일 확장명으로 항목을 요청한 경우 404 상태 코드를 반환하려는 경우 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를 반환하고 컨텍스트 항목이 찾을 수없는 항목이어야한다고 말합니다. 코드를 확장하여 점 뒤에 오는 항목이 올바른 확장인지 확인합니다.