Переписывающий URL с двумя вопросительными знаками в Rewriter - PullRequest
1 голос
/ 02 декабря 2011

Я не могу использовать дружественные URL на своем сайте DotNetNuke, и модуль, который я хочу использовать, требует этого.Проблема заключается в том, что, когда они отправляют сообщения во 2-ю часть процесса модуля, они добавляют «? Ctlname = Step2», а затем «? Ctlname = Step3» для следующего шага.Итак ...

URL заканчивается примерно так:

default.aspx? Tab = 123 *? * ctlname = Step2

Я пытаюсь решить эту проблему, переписав URL.Кажется, что это должно работать, но это не так.

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

Любая помощь будет признательна!

Ответы [ 2 ]

0 голосов
/ 08 декабря 2011

Невозможно обработать переписанный 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, если это вообще возможно.

0 голосов
/ 02 декабря 2011

Прошло некоторое время с тех пор, как я его использовал, но Snapsis Pageblaster может помочь. Он, по сути, кеширует, оптимизирует вашу производительность, но у него есть еще одна классная функция, которая может искать / заменять контент перед его отправкой в ​​браузер клиента. Таким образом, вы можете переписать правила с ним и, возможно, сможете очистить эти URL, если не можете получить исходный код.

Если они используют? оценки для всех параметров URL, то я представляю, что исходный код будет ужасающим. ;)

...