Получается ли совпадение регулярного выражения 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}&banner={R:2}&add_code={R:3}&deploy={R:4}&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}&banner={R:3}&add_code={R:5}&??;deploy={R:7}&opt={R:9}
,