2011-12-01 1 views
1

DotNetNuke 사이트에서 친숙한 URL을 사용할 수없고 사용하려는 모듈에 필요합니다. 문제는 모듈 프로세스의 두 번째 부분에 "? ctlname = Step2"및 "? ctlname = Step3"을 다음 단계로 게시 할 때 발생합니다. ?구성에서 Rewriter를 사용하여 2 개의 물음표가있는 URL 재 작성

default.aspx에 탭 = 123 * : 그래서 ...

의 URL은 다음과 같이 될 수있을 테니까요? * ctlname = Step2

URL을 다시 작성하여 해결하려고합니다. 이것은 작동해야하지만 그렇게하지 않는 것 같습니다.

<RewriterRule> 
    <LookFor>.*/Default.aspx\?tabid=123(\?ctlname=.*)$</LookFor> 
    <SendTo>~/Default.aspx?tabid=123&amp;ctlname=$1</SendTo> 
</RewriterRule> 

아무 도움이됩니다.

+0

URL에 물음표를 여러 개 사용하지 않으면 다른 매개 변수를 앰퍼샌드로 구분해야합니다 (예 : 'default.aspx? tab = 123 & ctlname = Step2' – Polynomial

+0

농담이 아닙니다. 우리가 URL을 쓰는 사람이라면 그렇게하지 않을 것입니다. 우리는 모듈이 뱉어내는 코드를 처리해야합니다. 우리는 모듈을 작성하지 않았습니다. :) – mokumaxCraig

+0

아, 그래. Eww. – Polynomial

답변

0

내가 사용한 이후로 잠시 지났지 만 Snapsis Pageblaster이 도움이 될 수 있습니다. 기본적으로 성능을 최적화하고 캐시하지만 클라이언트 브라우저로 보내기 전에 콘텐츠를 검색/바꿀 수있는 또 다른 멋진 기능이 있습니다. 따라서 규칙을 다시 작성하면 소스 코드를 얻을 수없는 경우 해당 URL을 정리할 수 있습니다.

? 모든 URL 매개 변수에 대한 표시가 표시되면 소스 코드가 무섭을 것이라고 상상해보십시오. ;)

0

siteUrls.config 다시 쓰기 규칙을 사용하여 다시 작성되지 않은 URL을 처리 할 수 ​​없습니다.

이것은 각 정규식 패턴을 처리하는 규칙 엔진에 전달되기 전에 쿼리 문자열이 경로에서 제거되기 때문입니다.

다음
string strQueryString = ""; 
if ((!String.IsNullOrEmpty(app.Request.Url.Query))) 
{ 
    strQueryString = request.QueryString.ToString(); 
    requestedPath = requestedPath.Replace(app.Request.Url.Query, ""); 
} 

, 더 페이지 아래, 당신이 찾을 수 있습니다 :

//check for the existence of the LookFor value 
string pattern = "^" + RewriterUtils.ResolveUrl(app.Context.Request.ApplicationPath, rules[ruleIndex].LookFor) + "$"; 
Match objMatch = Regex.Match(requestedPath, pattern, RegexOptions.IgnoreCase); 

따라서 당신이 할 수있는 UrlRewriteModule.cs에서

, 당신은 다음과 같습니다 코드를 찾을 수 있습니다 당신이 십자가에 달할 때까지 게시 한 정규 표현식으로 바이올린을 만들지 만 결코 작동하지 않습니다. 이는 정규 표현식 패턴이 이미 requestedPath 값에 대해 평가 되었기 때문입니다.이 값에는 이미 쿼리 문자열이 제거되어 있습니다.

DNN Url Rewriter의 업 스트림 또는 Url Rewriter의 사용자 지정 버전 (필자는 권장하지 않음)에서 발생하는 재 작성 솔루션이 필요합니다. DNN이 그것을보기까지 Url을 조작하는 IIS7 URL Rewrite와 같은 것입니다.

하지만 누구나 잘못된 URL 문자를 사용하지 않도록 코드를 제어하는 ​​사람에게 던지기에 좋은시기이기도합니다.