Невозможно обработать переписанный URL-адрес с правилами перезаписи siteUrls.config.
Это потому, что строка запроса удаляется из пути перед передачей в механизм правил, который обрабатывает каждый шаблон регулярных выражений.
В UrlRewriteModule.cs вы найдете код, который выглядит следующим образом:
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);
Таким образом, вы можете поиграть с регулярным выражением, которое вы разместили, пока вы не коснетесь глазом, но это никогда не сработает. Это связано с тем, что шаблон регулярного выражения оценивается по значению requestedPath
, в котором уже удалена строка запроса.
Вам понадобится решение для перезаписи, которое происходит вверх по течению от DNN Url Rewriter, или настроенная версия Url Rewriter (которую я не рекомендую). Что-то вроде переписывания URL-адреса IIS7, которое обрабатывает URL-адрес еще до того, как DNN его увидит.
Но это также хорошее время, чтобы показать, кто бы ни контролировал код, чтобы прекратить использовать недопустимые символы URL, если это вообще возможно.