Erstellen von Ausgangsregeln für das URL-Rewrite-Modul

von Ruslan Yakushev

Dieser Abschnitt der Dokumentation bezieht sich auf URL Rewrite in der Modulversion 2.0 für IIS 7.

Diese exemplarische Vorgehensweise führt Sie durch das Erstellen und Testen einer Rewrite-Ausgangsregel für das URL-Rewrite-Modul 2.0.

Voraussetzungen

Für diese exemplarische Vorgehensweise wird Folgendes vorausgesetzt:

  1. IIS 7 oder höher mit aktiviertem ASP.NET-Rollendienst;
  2. URL-Rewrite-Modul 2.0 RC-Release installiert.

Einrichten einer Testwebseite

Zur Veranschaulichung der Funktionsweise des URL-Rewrite-Moduls 2.0 verwenden wir eine einfache ASP.NET-Testseite. Diese Seite liest die Webservervariablen und gibt ihre Werte im Browser aus. Sie erstellt zudem einen Hyperlink mit den Servervariablen, und fügt diesen Link dann in den HTML-Code der Antwort ein.

So erstellen Sie die Testseite

  1. Erstellen Sie eine Datei mit dem Namen „article.aspx“ im folgenden Ordner:

    %SystemDrive%\inetpub\wwwroot\
    
  2. Kopieren Sie das folgende ASP.NET-Markup in die Datei, und speichern Sie die Datei:

    <%@ 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 v2 Test</title>
    </head>
    <body>
        <h1>URL Rewrite Module v2 Test Page</h1>
        <h2>Inbound URL Rewriting</h2>
        <table>
            <tr>
                <th>Server Variable</th>
                <th>Value</th>
            </tr>
            <tr>
                <td>Original URL: </td>
                <td><%= Request.ServerVariables["UNENCODED_URL"] %></td>
            </tr>
            <tr>
                <td>Final URL: </td>
                <td><%= Request.ServerVariables["SCRIPT_NAME"] + "?" + Request.ServerVariables["QUERY_STRING"] %></td>
            </tr>
        </table>
        <h2>Outbound URL Rewriting</h2>
            <a href="<%= Request.ServerVariables["SCRIPT_NAME"] + "?" + Request.ServerVariables["QUERY_STRING"] %>">Here</a> is the link to this article.
    </body>
    </html>
    
  3. Öffnen Sie einen Webbrowser, und rufen Sie die folgende URL auf, um sicherzustellen, dass die Seite korrekt gerendert wird:

    http://localhost/article.aspx
    

Hinzufügen einer Rewrite-Eingangsregel

Der nächste Schritt besteht darin, eine Regel hinzuzufügen, die URLs mit dem folgenden Format umschreibt:

http://localhost/article/342/some-article-title

Diese URLs werden in ein Format ähnlich dem Folgenden umgeschrieben:

http://localhost/article.aspx?id=342&title=some-article-title

So fügen Sie die Rewrite-Eingangsregel hinzu:

  1. Öffnen Sie die Datei web.config am folgenden Speicherort:

    %SystemDrive%\inetpub\wwwroot\
    
  2. Fügen Sie unter dem Element /configuration/system.webServer Folgendes hinzu, und speichern Sie die Datei:

    <rewrite>
      <rules>
        <rule name="Rewrite to article.aspx">
          <match url="^article/([0-9]+)/([_0-9a-z-]+)" />
          <action type="Rewrite" url="article.aspx?id={R:1}&amp;title={R:2}" />
        </rule>
      </rules>
    </rewrite>
    

Weitere Informationen zum Erstellen von eingehenden Umschreibregeln finden Sie unter Erstellen von Umschreibungsregeln für das URL-Rewrite-Modul.

Testen der Rewrite-Eingangsregel

Sie können jetzt testen, ob die eingehende Umschreibregel wie erwartet funktioniert.

So testen Sie die Rewrite-Eingangsregel:

Öffnen Sie einen Webbrowser und rufen Sie die folgende URL auf:

http://localhost/article/342/some-article-title

Wenn die Umschreibregel ordnungsgemäß funktioniert, erhalten Sie eine Antwort vom Server, die wie folgt aussieht:

Screenshot of the Final U R L after hovering over the link in the U R L Rewrite Module Test Page using a web browser.

Dank der Eingangsregel kann die Webseite jetzt über eine einfache und benutzerfreundliche URL-Struktur aufgerufen werden. Wenn ein Benutzer jedoch innerhalb der HTML-Seite auf den Hyperlink klickt, wird die URL mit den Abfragezeichenfolgenparametern vom Webbrowser verwendet. Das ist aus mehreren Gründen nicht erwünscht:

  1. Websitebesucher sehen die interne URL-Struktur, die Sie durch die Verwendung einer URL-Rewrite-Regel eigentlich verbergen wollten.
  2. Auf dieselbe Seite kann über mehrere URLs zugegriffen werden, was für die Suchmaschinenoptimierung nicht ideal ist.

Die einfachste Möglichkeit, dies zu beheben, besteht darin, die HTML-Seite so zu ändern, dass sie die einfache Linkstruktur verwendet. In vielen Fällen ist dies jedoch nicht möglich. Wenn Sie beispielsweise bereits über eine komplexe Legacywebanwendung oder eine Webanwendung verfügen, an der keine Änderungen vorgenommen werden können, kann die Bearbeitung aller URL-Links in der Anwendung sehr zeitaufwändig oder gar nicht machbar sein.

In diesem Fall kann das Umschreiben ausgehender URLs weiterhelfen. Mithilfe der Umschreibung ausgehender URLs können Links direkt beim Generieren einer Antwort von der Anwendung angepasst werden.

Erstellen einer Rewrite-Ausgangsregel

Sie erstellen nun eine Rewrite-Ausgangsregel, die URLs in HTML-Antworten umschreibt. Die Regel ändert URLs mit dem folgenden Format:

http://localhost/article.aspx?id=342&title=some-article-title

Diese URLs werden wie folgt umgeschrieben:

http://localhost/article/342/some-article-title

Sie erstellen die Ausgangsregel mithilfe der URL-Rewrite-Benutzeroberfläche im IIS-Manager.

So erstellen Sie die Ausgangsregel:

  1. Öffnen Sie den IIS-Manager.
  2. Klicken Sie auf „Standardwebsite“.
  3. Wählen Sie in der „Featureansicht“ die Option „URL-Umschreibung“ aus.
    Screenshot of U R L Rewrite selected in the Default Web Site Home pane.
  4. Klicken Sie im Bereich „Aktionen“ auf der rechten Seite auf „Regeln hinzufügen...“. Wählen Sie im Dialogfeld „Regeln hinzufügen“ die „Leere Regel“ unter der Kategorie „Ausgangsregeln“ aus, und klicken Sie auf „OK“.
    Screenshot of selecting a Blank rule template under Outbound rules in the Add Rules dialog.

Jetzt müssen Sie die eigentliche Ausgangsregel definieren. Im URL-Rewrite-Modul 2.0 wird eine Rewrite-Ausgangsregel durch Angabe der folgenden Informationen definiert:

  • Name der Regel.
  • Eine optionale Vorbedingung, die steuert, ob die Regel auf eine Antwort angewendet werden soll.
  • Das Muster, das für den Abgleich mit der Zeichenfolge in der Antwort verwendet werden soll.
  • Eine optionale Reihe von Bedingungen.
  • Die Aktion, die ausgeführt werden soll, wenn ein Muster übereinstimmt und alle Bedingungsprüfungen erfolgreich waren.

Benennen der Regel

Geben Sie in das Textfeld „Name“ einen Namen ein, der die Regel eindeutig identifiziert, z. B.: „In einfache URL umschreiben“.

Definieren einer Vorbedingung

Eine Vorbedingung wird verwendet, um festzustellen, ob die Ausgangsregel für eine Antwort ausgewertet werden soll. Wenn beispielsweise eine Regel HTML-Inhalte ändert, sollten nur HTTP-Antworten, deren Content-Type-Header auf „text/html“ gesetzt ist, anhand dieser Regel ausgewertet werden. Die Auswertung von Ausgangsregeln und das Umschreiben von Inhalten ist ein CPU-intensiver Vorgang, der sich negativ auf die Leistung einer Webanwendung auswirken kann. Verwenden Sie daher Vorbedingungen, um die Fälle einzugrenzen, in denen Ausgangsregeln angewendet werden.

Da die zu erstellende Regel nur auf HTML-Antworten angewendet werden soll, definieren Sie eine Vorbedingung, die überprüft, ob der Inhaltstyp des HTTP-Antwortheaders gleich „text/html“ ist.

So definieren Sie eine Vorbedingung:

  1. Wählen Sie in der Liste „Vorbedingungen“ die Option „<Neue Vorbedingung erstellen>“ aus.

  2. Dadurch gelangen Sie zum Dialogfeld „Vorbedingungs-Editor“, in dem Sie die Vorbedingung definieren müssen. Legen Sie die Vorbedingung wie folgt fest:

    • Name: „IsHTML

    • Verwendet: „Reguläre Ausdrücke

    • Klicken Sie auf „Hinzufügen“, um das Dialogfeld „Bedingung hinzufügen“ anzuzeigen. Geben Sie in diesem Dialogfeld Folgendes an:

      • Bedingungseingabe: „{RESPONSE_CONTENT_TYPE}

      • Überprüfen, ob Eingabezeichenfolge: „Entspricht dem Muster

      • Muster: „^text/html

        Screenshot of adding a new pre-condition with the specified settings.

  3. Klicken Sie auf „OK“, um die Vorbedingung zu speichern und zur Seite „Regel bearbeiten“ zurückzukehren.

Definieren des Übereinstimmungsbereichs

Die Rewrite-Ausgangsregel kann den Inhalt eines HTTP-Headers oder den Antworttext verändern. Diese Regel soll Links im Antwortinhalt ändern. Wählen Sie daher in der Dropdown-Liste „Übereinstimmungsbereich“ die Option „Antwort“.

Definieren eines Tagfilters

Tagfilter werden verwendet, um den Musterabgleich auf bestimmte HTML-Elemente zu beschränken, anstatt die gesamte Antwort mit dem Regelmuster zu vergleichen. Der Musterabgleich ist ein sehr CPU-intensiver Vorgang. Wird die gesamte Antwort mit einem Muster verglichen, kann dies die Reaktionszeit der Webanwendung erheblich verlangsamen. Mit Tagfiltern können Sie angeben, dass der Musterabgleich auf den Inhalt bestimmter HTML-Tags beschränkt wird. Das verringert die Datenmenge, die mit dem RegEx-Muster verglichen werden muss, ganz erheblich.

Um einen Tagfilter zu definieren, erweitern Sie die Dropdownliste „Inhalt abgleichen in:“, und aktivieren Sie das Kontrollkästchen „A (href-Attribut)“.

Die Regel vergleicht das Muster dann nur mit dem Wert des href-Attributs des Hyperlinks, wie im folgenden Beispiel gezeigt:

<a href="this string will be used for pattern matching">Some link</a>

Definieren eines Musters

Geben Sie im Textfeld „Muster“ die folgende Zeichenfolge ein:

^/article\.aspx\?id=([0-9]+)(?:&|&amp;)title=([_0-9a-z-]+)$

Diese Zeichenfolge ist ein regulärer Ausdruck, der angibt, dass das Muster jeder URL-Pfadzeichenfolge entspricht, die die folgenden Bedingungen erfüllt:

  • Beginnt mit der Zeichensequenz „/article.aspx?“.
  • Enthält einen ersten Abfragezeichenfolgenparameter mit einem numerischen Wert.
  • Enthält einen zweiten Abfragezeichenfolgenparameter mit einem alphanumerischen Wert.

Beachten Sie, dass bestimmte Teile des regulären Ausdrucks in Klammern stehen. Diese Klammern erstellen Erfassungsgruppen, auf die später mithilfe von Rückverweisen in der Regel verwiesen werden kann. In den meisten Fällen ist das „&“-Symbol in der Antwort HTML-codiert, sodass das RegEx-Muster dies berücksichtigen muss.

Definieren einer Aktion

Wählen Sie den Aktionstyp „Umschreiben“ im Gruppenfeld „Aktion“ aus. Geben Sie im Textfeld „Wert“ die folgende Zeichenfolge ein:

/article/{R:1}/{R:2}

Diese Zeichenfolge gibt den neuen Wert an, in den die Linkadresse umgeschrieben werden soll. Beachten Sie, dass der Ausdruck „{R:1}“ und „{R:2}“ für die Werte der Abfragezeichenfolgenparameter verwendet, bei denen es sich um Rückverweise auf die Erfassungsgruppen handelt, die mithilfe von Klammern im Regelmuster definiert wurden.

Übernehmen Sie für alle anderen Einstellungen die Standardwerte. Die Eigenschaftenseite „Regel bearbeiten“ sieht wie folgt aus:

Screenshot before applying the new Outbound Rewrite Rule with the Is H T M L Pre-condition

Speichern Sie die Regel, indem Sie auf der rechten Seite die Aktion „Übernehmen“ auswählen.

Anzeigen der Umschreibregel in der Konfigurationsdatei

Die Umschreibregeln werden entweder in der Datei aplicationHost.config oder in web.config-Dateien gespeichert. Um die Konfiguration der soeben erstellten Regel zu überprüfen, öffnen Sie eine „web.config“-Datei in

%SystemDrive%\inetput\wwwroot\

In dieser Datei sehen Sie den Abschnitt <rewrite>, der alle Regeldefinitionen enthält, wie im folgenden Beispiel:

<rewrite>
 <rules>
  <rule name="Rewrite to article.aspx">
   <match url="^article/([0-9]+)/([_0-9a-z-]+)" />
   <action type="Rewrite" url="article.aspx?id={R:1}&amp;title={R:2}" />
  </rule>
 </rules>
 <outboundRules>
  <rule name="Rewrite to clean URL" preCondition="IsHTML">
   <match filterByTags="A" pattern="^/article\.aspx\?id=([0-9]+)(?:&amp;|&amp;amp;)title=([_0-9a-z-]+)$" />
   <action type="Rewrite" value="/article/{R:1}/{R:2}" />
  </rule>
  <preConditions>
   <preCondition name="IsHTML">
    <add input="{RESPONSE_CONTENT_TYPE}" pattern="^text/html" />
   </preCondition>
  </preConditions>
 </outboundRules>
</rewrite>

Testen der Regel

Sie können jetzt testen, ob die Regel URLs ordnungsgemäß umschreibt. Öffnen Sie einen Webbrowser und rufen Sie die folgende URL auf:

http://localhost/article/342/some-article-title

Sie sollten sehen, dass die Rewrite-Ausgangsregel den Link in der HTML-Antwort geändert hat:

Screenshot of the new U R L after hovering over the link in the U R L Rewrite Module Test Page using a web browser.

Wenn ein Websitebesucher nun auf diesen Link klickt, wird das umgeschriebene URL-Format verwendet. Die interne URL-Darstellung der Seite wird nicht angezeigt.

Zusammenfassung

In dieser exemplarischen Vorgehensweise haben Sie erfahren, wie Sie im URL-Rewrite-Modul 2.0 mithilfe des IIS-Managers oder durch manuelles Bearbeiten der Datei web.config Rewrite-Ausgangsregeln konfigurieren. Die in dieser exemplarischen Vorgehensweise erstellten Regeln veranschaulichten einige der wichtigen Features des URL-Rewrite-Moduls 2.0, z. B. ausgehendes Umschreiben, Vorbedingungen und Tagfilter.