Получается ли совпадение регулярного выражения URL Rewrite с тем же результатом, что и строка, разделенная на '/'? - PullRequest
0 голосов
/ 27 февраля 2012

Я пытаюсь заменить скрипт перенаправления PHP, который разделяет строку запроса на '/', правилом 2.0 перезаписи URL IIS 7.

Вот код, который извлекает информацию из запроса в исходном перенаправлениисценарий:

list($campaign,$banner,$add_code,$deploy,$opt) = split("/",$_SERVER['QUERY_STRING']);

И вот что я думаю, может заменить это:

<rule name="MyRule">
   <match url="(.*?)/(.*?)/(.*?)/(.*?)/(.*)" />
   <action type="Redirect" url="TestRedirectTarget.aspx/?campaign={R:1}&amp;banner={R:2}&amp;add_code={R:3}&amp;deploy={R:4}&amp;opt={R:5}" />
</rule>

Я спрашиваю, есть ли что-то, о чем я не думаю, с точки зрения совпадения регулярного выраженияфункциональность как логика строкового разбиения PHP в список.Я обнаружил, что проблема заключается в том, что мне пришлось использовать ленивое сопоставление для обработки случая, когда существует более 5 частей URL-адреса с косой чертой.Мне интересно, есть ли другие случаи, когда результат не будет таким же.

1 Ответ

1 голос
/ 05 марта 2012

ваш expr expr отличается от URL-адресов, которые содержат имя / адрес сервера (несоответствие сопоставления) и чьи qs содержат менее 5 частей (потенциально не совпадают вообще).
чтобы поймать эти условия, используйте атрибуты url следующим образом:
\?([^/]*)($|/([^/]*)($|/([^/]*)($|/([^/]*)($|/(.*)))))
-> TestRedirectTarget.aspx/?campaign={R:1}&amp;banner={R:3}&amp;add_code={R:5}&amp??;deploy={R:7}&amp;opt={R:9}.

...