Parameter für die Abfragezeichenfolge des IIS-URL-Rewrite-Moduls

7

Ist es möglich, URL Rewrite zu verwenden, um komplexere Funktionen für Abfragezeichenfolgen bereitzustellen als das Kontrollkästchen "Abfragezeichenfolge anhängen"? Insbesondere ist es möglich, die Schlüssel für bestimmte Abfragezeichenfolgenparameter anzugeben und nur diese Name-Wert-Paare anhängen zu lassen.

Zum Beispiel für die Eingabe:

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

und die Liste der Parameterschlüssel für Abfragezeichenfolgen: Beta-Gamma

Es sollte Folgendes ausgeben: http://www.example.org/redirect?beta=2&gamma=3

(Beachten Sie, dass die Parameter der Abfragezeichenfolge in der Eingabe in beliebiger Reihenfolge angezeigt werden.)

Jason Kresowaty
quelle

Antworten:

13

Meine Lösung wären Nutzungsbedingungen dafür. Indem Sie die Bedingungen mit denen vergleichen {QUERY_STRING}, können Sie Rückverweise verwenden, um sie in der Umleitungs-URL zu verwenden.

<?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>

Das einzig mögliche Problem bei dieser Lösung sein könnte (je nachdem , was Sie wollen) , ist , dass die Umleitung nur , wenn beide passieren wird betaund gammaQuery - String - Variablen vorhanden sind , in dem Query - String. Ist dies nicht der Fall, erfolgt die Umleitung nicht.

Die Umleitungsregel stimmt mit jeder URL überein ( (.*)). Bei Bedarf können Sie dies ändern. Ich habe auch eine zusätzliche Bedingung hinzugefügt, damit die Regel nicht mit der Umleitungs-URL selbst übereinstimmt, die andernfalls dazu führen würde, dass die Umleitungs-URL selbst umgeleitet wird.

Marco Miltenburg
quelle