Перезапись URL-адреса IIS не работает со строкой запроса

Я думал, что это было довольно просто, но он отказывается работать. Старый URL-адрес

http://www.site.com/?q=node/17

Необходимо выполнить перенаправление на http://www.site.com. Мне не нужно беспокоиться о подстановочных знаках, это единственный параметр строки запроса, о котором мне нужно беспокоиться. Написанное мной правило выглядит так

<rule name="Node17" patternSyntax="ExactMatch" stopProcessing="true">
    <match url="http://www.site.com/?q=node/17" />
    <action type="Redirect" url="http://www.site.com" appendQueryString="False" />
</rule>

Я могу протестировать шаблон внутри IIS, и он соответствует, но когда я нажимаю URL-адрес в браузере, он не перенаправляется. Есть предположения?


person MyBrokenGnome    schedule 03.10.2013    source источник


Ответы (2)


Как описано в документации Microsoft :

Важно понимать, как можно получить доступ к определенным частям строки URL из правила перезаписи.

Для URL-адреса HTTP в этой форме: http (s): // {host}: {port} / {path}? {Querystring}

{Path} сопоставляется с шаблоном правила. {Querystring} доступен в переменной сервера QUERY_STRING, и к нему можно получить доступ с помощью условия в правиле.

Условия правила позволяют определить дополнительную логику для оценки правила ... Условия правила оцениваются после успешного совпадения с шаблоном правила.

В URL, который вы хотите переписать в качестве перенаправления, ваши {host} = "www.site.com", {path} = "" и {querystring} = "q=node/17". Таким образом, часть {path} в URL-адресе, который вы хотите перенаправить, на самом деле пуста, и правило, которое вы использовали в своем вопросе, было сопоставлено с ним и не соответствовало.

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

<rule name="Node17" stopProcessing="true">
    <match url=".*" />
<conditions>
    <add input="{QUERY_STRING}" pattern="q=node/17" />
</conditions>
<action type="Redirect" url="http://www.example.com" appendQueryString="False" />
</rule>
person RonyK    schedule 30.10.2014

Конечно, я понял это вскоре после публикации. Это делает это, но не совсем уверен, почему точное совпадение не работает.

<rule name="Node17" stopProcessing="true">
    <match url=".*" />
<conditions>
    <add input="{QUERY_STRING}" pattern="q=node/17" />
</conditions>
<action type="Redirect" url="http://www.site.com" appendQueryString="False" />
</rule>
person MyBrokenGnome    schedule 03.10.2013