Можно ли использовать Перезапись URL чтобы обеспечить более сложную функциональность строки запроса, чем установленный там флажок «Добавить строку запроса»? В частности, можно ли указать ключи для определенных параметров строки запроса и добавить к ним только эти пары имя-значение.
Например, для ввода:
http://www.example.org/test?alpha=1&beta=2&gamma=3
и список ключей параметров строки запроса: beta gamma
он должен выводить: http://www.example.org/redirect?beta=2&gamma=3
(Обратите внимание, что параметры строки запроса во входных данных отображаются в произвольном порядке.)
Мое решение - использовать для этого условия. Сопоставляя условия с {QUERY_STRING}
вы можете использовать обратные ссылки, чтобы использовать их в URL-адресе перенаправления.
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.webServer>
<rewrite>
<rules>
<rule name="Redirect" stopProcessing="true">
<match url="(.*)" />
<conditions trackAllCaptures="true">
<add input="{QUERY_STRING}" pattern="&?(beta=[^&]+)&?" />
<add input="{QUERY_STRING}" pattern="&?(gamma=[^&]+)&?" />
<add input="{REQUEST_URI}" pattern="^/redirect" negate="true" />
</conditions>
<action type="Redirect" url="/redirect?{C:1}&{C:2}" appendQueryString="false" redirectType="Found" />
</rule>
</rules>
</rewrite>
</system.webServer>
</configuration>
Единственная возможная проблема с этим решением может быть (в зависимости от того, что вы хотите) заключается в том, что перенаправление произойдет, только если оба beta
и gamma
переменные строки запроса присутствуют в строке запроса. В противном случае перенаправления не произойдет.
Правило перенаправления соответствует любому URL-адресу ((.*)
). При необходимости вы можете это изменить. Я также добавил дополнительное условие, чтобы правило не совпадало с самим URL-адресом перенаправления, что в противном случае привело бы к перенаправлению самого URL-адреса перенаправления.