Параметры строки запроса модуля перезаписи 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="&amp;?(beta=[^&amp;]+)&amp;?" />
                        <add input="{QUERY_STRING}" pattern="&amp;?(gamma=[^&amp;]+)&amp;?" />
                        <add input="{REQUEST_URI}" pattern="^/redirect" negate="true" />
                    </conditions>
                    <action type="Redirect" url="/redirect?{C:1}&amp;{C:2}" appendQueryString="false" redirectType="Found" />
                </rule>
            </rules>
        </rewrite>
    </system.webServer>
</configuration>

Единственная возможная проблема с этим решением может быть (в зависимости от того, что вы хотите), что перенаправление будет происходить только в том случае, если оба beta а также gamma переменные строки запроса присутствуют в строке запроса. Если это не так, перенаправление не произойдет.

Правило перенаправления соответствует любому URL ((.*)). При необходимости вы можете это изменить. Я также добавил дополнительное условие, чтобы правило не совпадало с URL-адресом перенаправления, что в противном случае могло бы привести к перенаправлению URL-адреса перенаправления.

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