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 문자를 사용하지 않도록 코드를 제어하는 사람에게 던지기에 좋은시기이기도합니다.
URL에 물음표를 여러 개 사용하지 않으면 다른 매개 변수를 앰퍼샌드로 구분해야합니다 (예 : 'default.aspx? tab = 123 & ctlname = Step2' – Polynomial
농담이 아닙니다. 우리가 URL을 쓰는 사람이라면 그렇게하지 않을 것입니다. 우리는 모듈이 뱉어내는 코드를 처리해야합니다. 우리는 모듈을 작성하지 않았습니다. :) – mokumaxCraig
아, 그래. Eww. – Polynomial