Параметры строки запроса модуля перезаписи URL IIS
Можно ли использовать URL Rewrite для обеспечения более сложной функциональности строки запроса, чем установленный флажок "Добавить строку запроса"? В частности, можно ли указать ключи для определенных параметров строки запроса и добавить к ним только те пары имен и значений.
Например, для ввода:
http://www.example.org/test?alpha=1&beta=2&gamma=3
и список ключей параметров строки запроса: бета-гамма
он должен вывести: http://www.example.org/redirect?beta=2&gamma=3
(Обратите внимание, что параметры строки запроса на входе отображаются в произвольном порядке.)
1 ответ
Моим решением было бы использовать условия для этого. Сопоставляя условия с {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-адреса перенаправления.