Назад | Перейти на главную страницу

Параметры строки запроса модуля перезаписи URL-адресов IIS

Можно ли использовать Перезапись 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="&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-адреса перенаправления.