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

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

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

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>

I'm asking if there's anything I am not thinking of in terms of the matching regex being the same functionality as the PHP string-split-assiged-to-list logic. I found an issue such that I had to use lazy matching to handle the case that there are more than 5 pieces of slash-separated-url. I'm wondering if there's other cases where the result would not be the same.

1 ответ

Решение

Ваш выражение совпадения отличается по 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},

Другие вопросы по тегам