문제

현재 SiteCore URL의 .aspx 확장을 제거하려고합니다.블로그에서는 다음을 변경하면이 문제가 해결 될 것입니다.

<add name="sitecore" type="Sitecore.Links.LinkProvider, Sitecore.Kernel" addAspxExtension="true"
.

문제는 우리 웹 사이트에서 모든 코드에서 작동하지 않는다는 것입니다. 일부 사용자 정의 컨트롤은 .aspx의 사용을 강제로합니다.

제가 생각했던 것은 응답이 사용자에게 다시 보내지기 전에 파이프 라인에 들어갈 수 있다면 내가 더 많은 SEO 친화적 인 것 (.aspx 없음)으로 URL을 변경할 수 있다는 것입니다. 나는 이것을 사용하려고 노력하고 있습니다.다음 코드

public class CustomExecuteRequest : Sitecore.Pipelines.HttpRequest.ExecuteRequest
{
    protected override void PerformRedirect(string url)
    {
        base.PerformRedirect(url.Replace(".aspx" , ""));
    }

    public override void Process(Sitecore.Pipelines.HttpRequest.HttpRequestArgs args)
    {
        PerformRedirect(args.Url.FilePathWithQueryString.Replace(".aspx", ""));

        //args.Url.FilePathWithQueryString = args.Url.FilePathWithQueryString.Replace(".aspx", "");

        //base.Process(args);
    }
}
.

코드가 히트 되고이 솔루션이 작동하지만, 실제로하고 싶지 않은 리디렉션을 수행하고 있으며 URL이 정리 된 URL을 정기적으로 요청할 것입니다.문제는 args 변수가 실제로 URL을 생성하는 데 사용되는 읽기 전용 필드 (아래에서 주석 처리 된)를 가지고 있다는 것입니다.

누구든지 여기에서 URL을 변경하거나 파이프 라인의 다른 곳에서 다른 곳으로 변경할 수있는 방법에 대해 아이디어가 있습니까?

도움이 되었습니까?

해결책

httprequestpipeline에서 수행하는 작업은 링크를 변경하는 올바른 방법이 아닙니다.웹 응용 프로그램과 마찬가지로 페이지의 모든 링크가 HTTP 요청의 내용으로 클라이언트로 반환됩니다.요청 중에 리디렉션하면 렌더링 된 콘텐츠가 변경되지 않습니다.

이를 수행하는 유일한 방법은 어려운 방법입니다.

  • .aspx가 들어있는 링크를 생성하는 소스의 모든 장소를 찾습니다.솔루션 내부에서 "ASPX" 검색
  • 에 도움이 될 수 있습니다.
  • URLOPTIONS에 대한 모든 참조 및 LinkManager를 찾아 addaspxxextension= true 이 URLOptions로 수동으로 설정되어 있는지 확인하십시오.

이와 같은 것은 항상 .aspx 결말을 생성합니다 :

var urlOptions = UrlOptions.DefaultOptions;
urlOptions.AddAspxExtension = true;

LinkManager.GetItemUrl(item, urlOptions);
.

다른 팁

링크 관리자를 사용하도록 모든 링크를 변경하거나 시간을 묶은 경우 SiteCore 외부에서 무언가를 제안하고 IIS UrlRewrite 모듈을 사용하십시오.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top