web-dev-qa-db-ja.com

IIS URL書き換えモジュールのクエリ文字列パラメータ

RL Rewrite を使用して、[クエリ文字列を追加]チェックボックスよりも複雑なクエリ文字列機能を提供することは可能ですか?具体的には、特定のクエリ文字列パラメーターのキーを指定して、それらの名前と値のペアのみを追加することができます。

たとえば、入力の場合:

http://www.example.org/test?alpha=1&beta=2&gamma=

クエリ文字列パラメータキーのリスト:ベータガンマ

出力する必要があります: http://www.example.org/redirect?beta=2&gamma=

(入力のクエリ文字列パラメーターは任意の順序で表示されることに注意してください。)

7
Jason Kresowaty

私の解決策はそのための使用条件でしょう。 {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>

このソリューションで起こりうる唯一の問題は、(何をしたいかによって)betagammaの両方のクエリ文字列変数がクエリ文字列に存在する場合にのみリダイレクトが発生することです。そうでない場合、リダイレクトは行われません。

リダイレクトルールは、任意のURL((.*))と照合します。必要に応じて、それを変更できます。また、リダイレクトURL自体に対してルールが一致しないという条件を追加しました。そうしないと、リダイレクトURL自体がリダイレクトされます。

13