Freigeben über


Creating Rewrite Rules for the URL Rewrite Module (Erstellen von Neuschreibungsregeln für das URL-Rewrite-Modul)

von Ruslan Yakushev

Das URL-Rewrite-Modul ist eine Erweiterung von IIS, die als Download für Ihren eigenständigen IIS-Server verfügbar ist und zudem auf jeder Website in Windows Azure-Websites (WAWS) vorinstalliert und für Ihre Verwendungszwecke verfügbar ist. Diese exemplarische Vorgehensweise führt Sie durch das Erstellen und Testen einer Reihe von Umschreibungsregeln für das URL-Rewrite-Modul.

Voraussetzungen

Für diese exemplarische Vorgehensweise wird Folgendes vorausgesetzt:

  1. IIS 7 oder höher mit aktiviertem ASP.NET-Rollendienst
  2. Installiertes URL-Rewrite-Modul Weitere Informationen finden Sie unter Verwenden des URL-Rewrite-Moduls.

Einrichten einer Testwebseite

Zur Veranschaulichung der Funktionsweise des URL-Rewrite-Moduls verwenden wir eine einfache ASP.NET-Testseite. Diese Seite liest die Webservervariablen und gibt ihre Werte im Browser aus.

Kopieren Sie den folgenden ASP.NET-Code in eine Datei namens article.aspx im Ordner „%SystemDrive%\inetpub\wwwroot\“:

<%@ 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>

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

Erstellen einer Umschreibungsregel

Wir erstellen eine einfache Umschreibungsregel, die URLs mithilfe des folgenden Formats umschreibt:

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

Wir erstellen eine Umschreibungsregel mithilfe der URL-Umschreibungsbenutzeroberfläche im IIS-Manager. Gehen Sie dazu wie folgt vor:

  1. Navigieren Sie zum IIS-Manager.
  2. Klicken Sie auf Standardwebsite.
  3. Wählen Sie in der Featureansicht die Option URL umschreiben aus.
    Screenshot that shows the Default Web Site Home pane. U R L Rewrite is selected.
  4. Klicken Sie im Bereich Aktionen auf der rechten Seite auf Regeln hinzufügen....
    Screenshot that shows the U R L Rewrite pane.
  5. Wählen Sie im Dialogfeld Regeln hinzufügen zunächst Leere Regel und dann OK aus.
    Screenshot that shows the Add Rules dialog box.

Jetzt müssen Sie die eigentliche Umschreibungsregel definieren. Im URL-Rewrite-Modul wird eine Umschreibungsregel über vier erforderliche Informationen definiert:

  • Name der Regel.
  • Muster für den Abgleich der URL-Zeichenfolge.
  • Optionale Bedingungen.
  • Die Aktion, die ausgeführt werden soll, wenn ein Muster übereinstimmt und alle Bedingungsprüfungen erfolgreich waren.

Benennen einer Regel

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

Screenshot that shows the Edit Inbound Rule pane.

Definieren eines Musters

Geben Sie im Textfeld Muster die folgende Zeichenfolge ein:

^article/([0-9]+)/([_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:

  1. Beginnt mit der Zeichensequenz „article/“.
  2. Enthält ein oder mehrere numerische Zeichen nach dem ersten „/“.
  3. Enthält ein oder mehrere alphanumerische Zeichen oder „_“ oder „-“ nach dem zweiten „/“.

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.

Definieren einer Aktion

Da die zu erstellende Regel die URL umschreiben soll, wählen Sie im Gruppenfeld Aktion den Aktionstyp Umschreiben aus. Geben Sie im Textfeld URL umschreiben: die folgende Zeichenfolge ein:

article.aspx?id={R:1}&title={R:2}

Diese Zeichenfolge gibt den neuen Wert an, in den die Eingabe-URL umgeschrieben werden soll. Beachten Sie, dass für die Werte der Abfragezeichenfolgenparameter „{R:1}“ und „{R:2}“ verwendet wurden, 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 Eingehende Regel bearbeiten sollte wie die folgende Seite aussehen:

Screenshot that shows the Edit Inbound Rule property page.

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

Anzeigen der Umschreibungsregel in der Konfigurationsdatei

Die Umschreibungsregeln werden entweder in der „ApplicationHost.config“-Datei oder in „Web.config“-Dateien gespeichert. Um die Konfiguration der soeben erstellten Regel zu überprüfen, öffnen Sie eine „Web.config“-Datei in „%SystemDrive%\inetpub\wwwroot“. In dieser Datei sollte der Abschnitt <rewrite> mit dieser Regeldefinition angezeigt werden:

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

Die oben genannte Syntax gilt auch für die Konfiguration der URL-Umschreibung in Web.config in Windows Azure-Websites (WAWS).

Testen der Umschreibungsregel

Um zu testen, ob die Regel die URL richtig umschreibt, öffnen Sie einen Webbrowser, und fordern Sie die folgende URL an:

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

Die Umschreibungsregel auf dem Webserver sollte die ursprüngliche URL in „Article.aspx“ geändert und „234“ sowie „some-title“ als Werte für Abfragezeichenfolgenparameter übergeben haben.

Screenshot that shows the U R L Rewrite Module Test Page in Internet Explorer.

Erstellen einer Umleitungsregel

Nun erstellen wir eine Umleitungsregel, die alle URLs im folgenden Format:

http://localhost/blog/some-other-title/543
in das folgende Format umleitet:
http://localhost/article/543/some-other-title

Mit einer Umleitungsregel können mehrere URLs auf eine einzelne Webseite verweisen.

Öffnen Sie dazu die Benutzeroberfläche der des URL-Umschreibungsfeatures im IIS-Manager. Klicken Sie auf Regel(n) hinzufügen…, und wählen Sie dann erneut die Vorlage Leere Regel aus.

Geben Sie auf der Seite Regel bearbeiten Folgendes ein:

  • Name: Von Blog umleiten (Dies ist ein eindeutiger Name für die Regel.)
  • Muster: ^blog/([_0-9a-z-]+)/([0-9]+) (Dieses Muster entspricht der URL-Zeichenfolge, die mit „blog“ beginnt und die zweiten und dritten Segmente der URL in Rückverweisen erfasst.)
  • Aktion: Umleiten (Die Umleitungsaktion bewirkt, dass eine Umleitungsantwort an den Browser zurückgesendet wird.)
  • Umleitungs-URL: article/{R:2}/{R:1} (Diese Ersatzzeichenfolge wird als Umleitungs-URL verwendet. Beachten Sie, dass sie Rückverweise verwendet, um die ursprünglichen URL-Teile, die während dem Musterabgleich erfasst wurden, beizubehalten und neu anzuordnen.)

Geben Sie den Namen, das Muster und die Aktion wie unten dargestellt ein:

Screenshot that shows the Edit Inbound Rule pane. There are new entries for name, pattern and action.

Geben Sie die Umleitungs-URL wie unten dargestellt ein:

Screenshot that shows the Edit Inbound Rule pane. Under Action type, redirect has been selected and a Redirect U R L is entered.

Übernehmen Sie für alle anderen Einstellungen die Standardwerte. Speichern Sie die Regel, indem Sie auf der rechten Seite Übernehmen auswählen.

Testen der Umleitungsregel

Um zu testen, ob die Regel Anforderungen richtig umleitet, öffnen Sie einen Webbrowser, und fordern Sie die folgende URL an:

http://localhost/blog/some-other-title/323

Der Browser sollte aufgrund der Ausführung der Umleitungsregel zu http://localhost/article/323/some-other-title umgeleitet werden und die Anforderung dann gemäß der zuvor erstellten Umschreibungsregel umgeschrieben werden.

Screenshot that shows Internet Explorer on the U R L Rewrite Module Test Page.

Erstellen einer Zugriffsblockregel

Die dritte Regel, die wir erstellen, wird verwendet, um sämtliche Anforderungen an eine Website zu blockieren, wenn bei diesen Anforderungen kein Hostheader festgelegt ist. Diese Art von Regel ist nützlich, wenn Sie Hacking-Versuche verhindern möchten, die durch das Ausgeben von HTTP-Anforderungen an die IP-Adresse des Servers vorgenommen werden, anstatt den Hostnamen zu verwenden.

Wir erstellen diese Regel ohne den IIS-Manager. Öffnen Sie die „Web.config“-Datei im Ordner %SystemDrive%\inetpub\wwwroot\, die Sie am Anfang dieses Artikels für die „article.aspx“-Testdatei verwendet haben. Machen Sie den Abschnitt <rewrite> ausfindig. Fügen Sie die folgende Regel in die Sammlung <Regeln> ein, sodass sie die erste Regel in der Sammlung ist:

<rule name="Fail bad requests">
  <match url=".*"/>
  <conditions>
    <add input="{HTTP_HOST}" pattern="localhost" negate="true" />
  </conditions>
  <action type="AbortRequest" />
</rule>

Der Bereich <rewrite> sollte wie der folgende Code aussehen:

<rewrite>
  <rules>
    <rule name="Fail bad requests">
      <match url=".*"/>
      <conditions>
        <add input="{HTTP_HOST}" pattern="localhost" negate="true" />
      </conditions>
      <action type="AbortRequest" />
    </rule>
    <rule name="Redirect from blog">
      <match url="^blog/([_0-9a-z-]+)/([0-9]+)" />
      <action type="Redirect" url="article/{R:2}/{R:1}" redirectType="Found" />
    </rule>
    <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>

Analysieren wir die Regel, um zu verstehen, was sie tut.

<match url=".*"/>

Das obige Element gibt an, dass die Regel mit einer beliebigen URL-Zeichenfolge übereinstimmt.

<add input="{HTTP_HOST}" pattern="localhost" negate="true" />

Das obige Element fügt der Regel eine Bedingung hinzu, die den Wert des Hostheaders abruft, indem die Servervariable „HTTP_HOST“ gelesen wird, mit dem Muster „localhost“ abgleicht und dann das Ergebnis des Abgleichs negiert. Mit anderen Worten: Die Bedingung überprüft, ob der Hostheader nicht mit „localhost“ übereinstimmt.

<action type="AbortRequest" />

Das obige Element weist das URL-Rewrite-Modul an, die HTTP-Anforderung zu beenden.

Testen der Zugriffsblockregel

Um die Regel zu testen, öffnen Sie einen Webbrowser, und rufen Sie http://127.0.0.1/article/234/some-title auf. Der Browser sollte keine Antwort vom Server empfangen. Wenn Sie jedoch http://localhost/article/234/some-title anfordern, antwortet der Webserver erfolgreich.

Die erfolglose Anzeige sieht wie folgt aus:

Screenshot that shows a browser saying, This page can't be displayed.

Die erfolgreiche Anzeige sieht wie folgt aus:

Screenshot that shows the U R L Rewrite Module Test Page in a browser.

Zusammenfassung

In dieser exemplarischen Vorgehensweise haben Sie erfahren, wie Sie URL-Umschreibungsregeln mithilfe des IIS-Managers oder durch manuelles Bearbeiten von „Web.config“-Dateien konfigurieren. Die in dieser exemplarischen Vorgehensweise erstellten Regeln veranschaulichten einige der wichtigen Features des URL-Rewrite-Moduls, z. B. die Unterstützung regulärer Ausdrücke und die Möglichkeit, HTTP-Header und Servervariablen für Umschreibungen zu verwenden.