Freigeben über


Verwenden von Rewrite Maps im URL Rewrite Module

von Ruslan Yakushev

In diesem Leitfaden wird das Konzept der Umschreibungslisten im URL-Rewrite-Modul vorgestellt. Zudem erfahren Sie, wie Sie Umschreibungsregeln erstellen, die Umschreibungslisten verwenden. In dieser Anleitung erstellen Sie zwei Umschreibungszuordnungen: Eine Umschreibungszuordnung wird von einer Regel verwendet, die URL-Umschreibung durchführt, und eine andere Umschreibungszuordnung wird von einer Regel verwendet, die Umleitungen zu einer anderen Domäne durchführt.

Hintergrund

Eine Rewrite-Karte ist eine beliebige Sammlung von Namen- und Wertpaaren, die innerhalb von Rewrite-Regeln verwendet werden kann, um bei der Umschreibung eine Ersetzungs-URL zu generieren. Umschreibzuordnungen sind besonders nützlich, wenn Sie über eine große Reihe von Umschreibregeln verfügen und alle diese Regeln statische Zeichenfolgen verwenden (d. h., wenn kein Musterabgleich verwendet wird). In diesen Fällen können Sie, anstatt einen großen Satz einfacher Neuschreibregeln zu definieren, alle Zuordnungen in die Neuschreibkarte als Schlüssel-Werte-Paare zwischen der Eingabe-URL und der Ersetzungs-URL einfügen. Um dann die Ersetzungs-URL basierend auf der Eingabe-URL nachzuschlagen, nutzen Sie eine Umschreibregel, die auf diese Umschreibzuordnung verweist.

Voraussetzungen

Für diese Anleitung sind folgende Voraussetzungen erforderlich:

  1. IIS 7.0 oder höher mit aktivierter ASP.NET Rollendienst
  2. Die URL-Umschreibung 'Go Live'-Veröffentlichung wurde installiert.

Einrichten einer Testwebseite

Um die Rewrite-Map-Funktionalität zu veranschaulichen, verwenden wir eine einfache Test-ASP.NET-Seite. Diese Seite liest die Webservervariablen und gibt ihre Werte im Browser aus.

Kopieren Sie den folgenden ASP.NET Code, und fügen Sie ihn in den %SystemDrive%\inetpub\wwwroot\ Ordner in einer Datei namens article.aspx ein:

<%@ Page Language="C#" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>URL Rewrite Module Test</title>
</head>
<body>
      <h1>URL Rewrite Module Test Page</h1>
      <table>
            <tr>
                  <th>Server Variable</th>
                  <th>Value</th>
            </tr>
            <tr>
                  <td>Original URL: </td>
                  <td><%= Request.ServerVariables["HTTP_X_ORIGINAL_URL"] %></td>
            </tr>
            <tr>
                  <td>Final URL: </td>
                  <td><%= Request.ServerVariables["SCRIPT_NAME"] + "?" + Request.ServerVariables["QUERY_STRING"] %></td>
            </tr>
      </table>
</body>
</html>

Wechseln Sie nach dem Kopieren dieser Datei zu http://localhost/article.aspx, und überprüfen Sie, ob die Seite in einem Browser korrekt dargestellt wurde.

Screenshot der Testseite, die in einem Browser gerendert wird.

Erstellen einer Karte zum Umschreiben

Zunächst erstellen wir eine Umschreibungszuordnung und eine Umschreibungsregel, die verwendet werden, um die URL-Neuschreibung auf Grundlage einer Reihe statischer Zuordnungen zwischen originalen URLs und umgeschriebenen URLs durchzuführen. Führen Sie die folgenden Schritte aus, um eine Rewrite-Map zu erstellen:

  1. Wechseln zum IIS-Manager

  2. Wählen Sie "Standardwebsite" aus.

  3. Klicken Sie in der Featureansicht auf "URL neu schreiben"
    Screenshot mit U R L Rewrite in der Featureansicht.

  4. Klicken Sie im Bereich "Aktionen" auf der rechten Seite auf "Karten neu schreiben anzeigen...":
    Screenshot, der zeigt, wie Karten neu geschrieben werden können...

  5. Klicken Sie im Bereich "Aktionen" auf der rechten Seite auf "Umschreibungszuordnung hinzufügen..." und geben Sie dann den Namen der Umschreibungszuordnung als "StaticRewrites" ein.
    Screenshot des Felds

  6. Klicken Sie auf der Seite für neu erstellte Umschreibungszuordnung im Bereich "Aktionen" auf der rechten Seite auf "Zuordnungseintrag hinzufügen..." und geben Sie dann "/article" und "/article.aspx?id=1&title=some-title" für "Originalwert:" und "Neuer Wert:" ein. Der ursprüngliche Wert gibt an, von welchem URL-Pfad wir neu schreiben möchten; Der neue Wert gibt an, in welchen URL-Pfad wir umschreiben möchten.
    Screenshot mit den Feldern

  7. Wiederholen Sie Schritt 6, um die folgenden Zuordnungen zur Umschreibungszuordnung hinzuzufügen.

    Ursprünglicher Wert: Neuer Wert:
    /some-title /article.aspx?id=1&title=some-title
    /post/some-title.html /article.aspx?id=1&title=some-title

Öffnen Sie nun die web.config-Datei für Ihre Website (wenn Sie die Standardwebsite verwenden, finden Sie die web.config unter %SystemDrive%\inetpub\wwwroot). Der folgende Abschnitt sollte angezeigt werden:

<rewrite>
    <rewriteMaps>
        <rewriteMap name="StaticRewrites" defaultValue="">
            <add key="/article1" value="/article.aspx?id=1&amp;title=some-title" />
            <add key="/some-title" value="/article.aspx?id=1&amp;title=some-title" />
            <add key="/post/some-title.html" value="/article.aspx?id=1&amp;title=some-title" />
        </rewriteMap>
    </rewriteMaps>
</rewrite>

Diese Umschreibungszuordnung, die als "StaticRewrites" bezeichnet wird, wird verwendet, um eingehende URLs (definiert als Schlüssel in der Neuschreibungszuordnung) in ihre internen Darstellungen (definiert als Werte) umzuschreiben. Das DefaultValue-Attribut gibt an, welcher Wert verwendet werden soll, wenn eine eingehende URL nicht im Mapping definiert ist. In diesem Fall wird eine leere Zeichenfolge zurückgegeben.

Beachten Sie, dass in den Schlüsseln und deren Beziehung zu Werten kein offensichtliches gemeinsames Muster vorhanden ist. Dies bedeutet, dass es nicht möglich ist, reguläre Ausdrücke oder Wildcards zum Definieren der URL-Transformationslogik zu verwenden. Weiter bedeutet dies, dass wir, wenn wir keine Umschreibungszuordnungen verwendet hätten, drei Neuschreibregeln erstellen müssten. Bei neu geschriebenen Karten können wir nur eine Neuschreibregel erstellen. Im nächsten Abschnitt wird erläutert, wie Sie eine Rewrite-Regel erstellen, die diese Rewrite-Zuordnung verwendet.

Verweisen auf eine neu geschriebene Zuordnung aus neu geschriebener Regel

Um eine Neuschreibregel zu erstellen, die die Neuschreibzuordnungen verwendet, kopieren Sie den folgenden XML-Code, und fügen Sie ihn in den <rewrite>-Abschnitt der web.config-Datei für Ihre Website ein.

<rules>
    <rule name="Rewrite Rule">
        <match url=".*" />
        <conditions>
            <add input="{StaticRewrites:{REQUEST_URI}}" pattern="(.+)" />
        </conditions>
        <action type="Rewrite" url="{C:1}" />
    </rule>
</rules>

Lassen Sie uns jedes Regelelement durchgehen, um zu verstehen, was es tut:
<match url=".*" /> - Dieses Element weist das URL-Umschreibungsmodul an, mit allen eingehenden URLs übereinzustimmen (mithilfe des Sonderzeichens für reguläre Ausdrücke ".").

<add input="{StaticRewrites:{REQUEST\_URI}}" pattern="(.+)"> - Bei diesen Bedingungen wird geprüft, ob der von rewrite map StaticRewrites zurückgegebene Wert keine leere Zeichenfolge ist. Um diese Überprüfung durchzuführen, wird der Wert der Servervariablen REQUEST_URI als Parameter an die Rewrite-Map übergeben. Wenn die Umschreibungszuordnung einen Eintrag mit einem Schlüssel enthält, der mit REQUEST_URI identisch ist, wird der Wert zurückgegeben, der diesem Schlüssel entspricht. Das Muster für reguläre Ausdrücke stimmt nur mit nicht-leeren Zeichenfolgen überein. Wenn also eine leere Zeichenfolge von der Map zurückgegeben wurde, wird die Bedingung als falsch bewertet, daher wird keine Umschreibung ausgeführt. Wenn eine nicht leere Zeichenfolge zurückgegeben wurde, wird diese Zeichenfolge aufgrund der im Muster verwendeten Klammer in einem Back-Reference erfasst.

<action type="Rewrite" url="{C:1}" /> - Dieses Element gibt an, dass das URL-Umschreibmodul die aktuelle URL-Zeichenfolge mit der neuen, aus der Umschreibungszuordnung extrahierten, umschreiben soll. Beachten Sie, dass das URL-Attribut auf den Bedingungsrückverweis {C:1} verweist, der festgelegt wurde, wenn das Muster in der Bedingung abgeglichen wurde.

Testen der Regel für das Umschreiben

Um die Rewrite-Regel zu testen, die die Zuordnung "StaticRewrites" verwendet, öffnen Sie den Webbrowser, und fordern Sie eine der folgenden URLs an:

http://localhost/article1
http://localhost/some-title
http://localhost/post/some-title.html

Eine der oben genannten URLs sollte dazu führen, dass die URL gemäß den in der Umschreibungszuordnung definierten Zuordnungen neu geschrieben wird. Ihre Ergebnisse sollten wie die folgende Seite aussehen:

Screenshot, der die Ergebnisse des Tests zeigt.

Verwenden von Umleitungszuordnungen

Jetzt erstellen wir eine weitere Umschreibungszuordnung, die zum Definieren statischer Zuordnungen zwischen Quell-URLs und Umleitungs-URLs verwendet wird. Führen Sie zum Erstellen einer Umschreibungszuordnung die gleichen Schritte aus, wie im Abschnitt "Erstellen einer Karte zum Umschreiben" beschrieben, benennen Sie jedoch die Umschreibungszuordnung als "StaticRedirects", und verwenden Sie die folgenden Werte für Zuordnungseinträge:

Ursprünglicher Wert: Neuer Wert:
/old-article.aspx?id=1 /article.aspx?id=1
/posts/default.aspx?id=1 /article.aspx?id=1
/old-title.html /article.aspx?id=1

Die web.config-Datei für Ihre Website sollte jetzt diese beiden Umleitungsregeln enthalten:

<rewriteMaps>
    <rewriteMap name="StaticRewrites">
        <add key="/article1" value="/article.aspx?id=1&amp;title=some-title" />
        <add key="/some-title" value="/article.aspx?id=1&amp;title=some-title" />
        <add key="/post/some-title.html" value="/article.aspx?id=1&amp;title=some-title" />
    </rewriteMap>
    <rewriteMap name="StaticRedirects">
        <add key="/old-article.aspx?id=1" value="/article.aspx?id=1" />
        <add key="/posts/default.aspx?id=1" value="/article.aspx?id=1" />
        <add key="/old-title.html" value="/article.aspx?id=1" />
    </rewriteMap>
</rewriteMaps>

Um eine Regel zu erstellen, die die StaticRedirects-Zuordnung verwendet, kopieren Sie die folgende Regeldefinition, und fügen Sie sie in die web.config Datei für Ihre Website ein:

<rules>
    <rule name="Redirect Rule" stopProcessing="true">
        <match url=".*" />
        <conditions>
            <add input="{StaticRedirects:{REQUEST_URI}}" pattern="(.+)" />
        </conditions>
        <action type="Redirect" url="http://localhost{C:1}" appendQueryString="False" redirectType="Permanent" />
    </rule>
</rules>

Lassen Sie uns auch hier die einzelnen Regelelemente durchgehen, um zu verstehen, was es tut:
<match url=".*" /> - Dieses Element weist das URL-Umschreibungsmodul an, jede eingehende URL zu erkennen (unter Verwendung des Sonderzeichens für reguläre Ausdrücke ".").

<add input="{StaticRedirects:{REQUEST\_URI}}" pattern="(.+)"> - Bei diesen Bedingungen wird geprüft, ob der von der Rewrite-Zuordnung "StaticRedirects" zurückgegebene Wert keine leere Zeichenfolge ist. Um diese Überprüfung durchzuführen, wird der Wert der Servervariablen REQUEST_URI als Parameter an die Umschreibzuordnung übergeben. Wenn die Zuordnungskarte einen Eintrag mit einem Schlüssel enthält, der identisch mit REQUEST_URI ist, dann wird der Wert zurückgegeben, der diesem Schlüssel entspricht. Das Muster für reguläre Ausdrücke stimmt nur mit nicht leeren Zeichenfolgen überein. Wenn also eine leere Zeichenfolge von der Zuordnung zurückgegeben wird, wird die Bedingung als falsch ausgewertet, somit erfolgt kein Umschreiben. Wenn eine nicht leere Zeichenfolge zurückgegeben wurde, wird diese Zeichenfolge aufgrund der im Muster verwendeten Klammer in einem Back-Reference erfasst.

<action type="Redirect" url="http://localhost{C:1}" appendQueryString="False" redirectType="Permanent" /> - Dieses Element gibt an, dass das Modul für die URL-Umschreibung den Webclient zu einer neuen URL umleiten muss. Diese wird erstellt, indem der neue Domänenname (in diesem Fall aus Gründen der Einfachheit dieselbe Domäne) mit dem Umleitungs-URL-Pfad verkettet wird, der von der StaticRedirects-Zuordnung zurückgegeben wird.

Testen der Regel für die Umleitung

Um die Neuschreibregel zu testen, die die Zuordnung "StaticRedirects" verwendet, öffnen Sie den Webbrowser, und fordern Sie eine der folgenden URLs an:

http://localhost/old-article
http://localhost/posts/default.aspx?id=1
http://localhost/old-title.html

Eine der oben genannten URLs sollte dazu führen, dass der Browser zu der http://localhost/article.aspx?id=1umgeleitet wird.

Verwenden von Umschreibungszuordnungen für Abfragezeichenfolgenparameter

Die Verwendung von Rewrite Maps ist nicht auf die oben genannten Beispiele beschränkt. Die Neuschreibzuordnung ist eine generische Auflistung von Schlüsselwertpaaren, die überall in der Neuschreibregel verwendet werden können. Um dies zu veranschaulichen, erstellen wir eine Rewrite-Map, die zur Manipulation von Abfrageparameter der Zeichenfolge verwendet werden kann.

Erstellen Sie eine dritte Umschreibekarte, indem Sie die gleichen Schritte ausführen wie im Abschnitt "Erstellen einer Karte zum Umschreiben". Benennen Sie die Übersetzungskarte als "IDtoTitleMap" und verwenden Sie die folgenden Werte für Zuordnungseinträge:

Ursprünglicher Wert: Neuer Wert:
1 some-title-1
2 some-title-2
3 some-title-3

Die Datei 'web.config' für Ihre Webseite sollte jetzt diese beiden Rewrite-Maps enthalten:

<rewriteMaps>
    <rewriteMap name="StaticRewrites">
        <add key="/article1" value="/article.aspx?id=1&amp;title=some-title" />
        <add key="/some-title" value="/article.aspx?id=1&amp;title=some-title" />
        <add key="/post/some-title.html" value="/article.aspx?id=1&amp;title=some-title" />
    </rewriteMap>
    <rewriteMap name="StaticRedirects">
        <add key="/old-article.aspx?id=1" value="/article.aspx?id=1" />
        <add key="/posts/default.aspx?id=1" value="/article.aspx?id=1" />
        <add key="/old-title.html" value="/article.aspx?id=1" />
    </rewriteMap>
    <rewriteMap name="IDtoTitleMap">
        <add key="1" value="some-title-1" />
        <add key="2" value="some-title-2" />
        <add key="3" value="some-title-3" />
    </rewriteMap>
</rewriteMaps>

Um eine Regel zu erstellen, die die IDtoTitleMap-Zuordnung verwendet, kopieren und fügen Sie die folgende Regeldefinition in die web.config Datei Ihrer Website ein.

<rules>
    <rule name="Query String Rule" stopProcessing="true">
        <match url="^article\.aspx$" />
        <conditions>
            <add input="{QUERY_STRING}" pattern="(?:^|&)id=([0-9]+)(?:&|$)" />
            <add input="{IDtoTitleMap:{C:1}}" pattern="(.+)" />
        </conditions>
        <action type="Redirect" url="article.aspx?title={C:1}" appendQueryString="False" 
                                                            redirectType="Permanent" />
    </rule>
</rules>

Lassen Sie uns jedes Regelelement durchgehen, um zu verstehen, was es tut:
<match url="^article\.aspx$" /> - Dieses Element weist das URL-Umschreibungsmodul an, die Regel auszuführen, wenn die Datei article.aspx angefordert wird.

<add input="{QUERY\_STRING}" pattern="(?:^|&amp;)id=([0-9]+)(?:&amp;|$)" /> - Diese Bedingung überprüft, ob die Abfragezeichenfolge eine Parameter-ID mit einem numerischen Wert enthält. Der tatsächliche Wert wird in einem Rückverweis auf die Bedingung erfasst. Beachten Sie, dass dieses Muster auch dann funktioniert, wenn in der Abfragezeichenfolge andere Parameter vorhanden sind.

<add input="{IDtoTitleMap:{C:1}}" pattern="(.+)" /> - Diese Bedingungen überprüfen, ob der von rewrite map IDtoTitleMap zurückgegebene Wert keine leere Zeichenfolge ist. Die Bedingung verwendet den Rückverweis aus dem vorherigen Bedingungsmuster als Eingabe für die Umleitungskarte.

<action type="Redirect" url="article.aspx?title={C:1}" appendQueryString="False" redirectType="Permanent" /> - Dieses Element gibt an, dass das URL-Umschreibungsmodul den Webclient zurück zu article.aspx Datei umleiten muss, jedoch mit einem anderen Titel des Abfragezeichenfolgenparameters, der einen Wert aufweist, der in der Umschreibungszuordnung nachschlagen wurde.

Testen der Regel für die Abfragezeichenfolge

Um die Umschreibregel zu testen, die die Zuordnung "IDtoTitleMap" verwendet, öffnen Sie einen Webbrowser und rufen Sie eine der folgenden URLs auf:

http://localhost/article.aspx?id=1. Dies wird umgeleitet zu http://localhost/article.aspx?title=some-title-1. http://localhost/article.aspx?someparam=somevalue&id=2. Dies wird an http://localhost/article.aspx?title=some-title-2 umgeleitet.

Zusammenfassung

In dieser Anleitung haben Sie gelernt, wie Sie Umschreibungszuordnungen verwenden, um URL-Zuordnungen für Umschreibungs- und Umleitungsregeln zu definieren. Außerdem haben Sie gelernt, wie Sie Neuschreibungszuordnungen verwenden, um die Abfragezeichenfolgenparameter zu manipulieren.

Mithilfe der Umschreibungszuordnungen können Sie die Anzahl der Neuschreibregeln reduzieren, wenn neu geschriebene und Umleitungs-URLs statisch sind und die Umschreibungslogik nicht mithilfe von Musterabgleichstechniken ausgedrückt werden kann.