Freigeben über


Verwenden von globalen und verteilten Umschreibregeln

von Ruslan Yakushev

In dieser exemplarischen Vorgehensweise werden die verschiedenen Arten von Regeln erläutert, die vom URL-Umschreibungsmodul unterstützt werden, und Sie werden durch die Konfiguration globaler und verteilter Neuschreibregeln geführt.

Hintergrund

Globale Umschreibregeln werden verwendet, um serverweite URL-Umschreibungslogik zu definieren. Diese Regeln werden in applicationHost.config Datei definiert und können nicht auf niedrigeren Konfigurationsebenen wie Standort oder virtuelles Verzeichnis außer Kraft gesetzt oder deaktiviert werden. Globale Regeln werden immer auf dem absoluten URL-Pfad (d. a. angeforderter URI ohne Servername) ausgeführt. Wenn zum Beispiel eine Anforderung an http://localhost/directory1/directory2/index.html geschickt wird, übergibt das URL-Umschreibmodul "directory1/directory2/index.html" als Eingabe an eine globale Regel.

Verteilte Umschreibregeln werden verwendet, um URL-Umschreibungslogik zu definieren, die für einen bestimmten Konfigurationsbereich spezifisch ist. Verteilte Regeln können auf jeder Konfigurationsebene (mit Ausnahme der Datei) mithilfe von web.config Dateien definiert werden. Lokale Regeln funktionieren immer auf URLs relativ zum Speicherort der Web.config Datei, in der sie definiert sind. Wenn beispielsweise eine Anforderung an http://localhost/directory1/directory2/index.html gestellt wurde und eine Umschreibregel in der Web.config-Datei in Verzeichnis 1 definiert wurde, übergibt das URL-Umschreibmodul "directory2/index.html" als Eingabe an diese Regel.

Der globale Regelsatz wird immer zuerst ausgewertet, und danach wird der verteilte Regelsatz mithilfe einer URL-Zeichenfolge ausgewertet, die von einem globalen Regelsatz erzeugt wird.

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 eines Schritt-für-Schritt-Szenarios

Um zu veranschaulichen, wie globale und lokale Regeln verwendet werden, implementieren wir ein gemeinsames Szenario für die Zuordnung von Unterdomänen zu Verzeichnissen. Dies ermöglicht es uns, Unterdomänen für den Zugriff auf Inhalte in verschiedenen Verzeichnissen auf unserer Website zu verwenden. Benutzer können zum Beispiel zu http://blog.mysite.com anstelle von http://mysite.com/blog wechseln oder zu http://forum.mysite.com anstelle von http://mysite.com/forum wechseln.

Führen Sie zum Einrichten des Szenarios die folgenden Schritte aus:

  1. Erstellen Sie zwei Ordner namens "Blog" und "Forum" im %SystemDrive%\inetpub\wwwroot\ Ordner.

  2. Kopieren Sie den folgenden asp.net Code, und fügen Sie ihn in den %SystemDrive%\inetpub\wwwroot\blog 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>
          <p>This page is located in blog subdomain.</p>
          <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>
    
  3. Kopieren Sie den folgenden asp.net Code, und platzieren Sie ihn in dem %SystemDrive%\inetpub\wwwroot\forum Ordner in einer Datei namens forum.aspx:

    <%@ 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>
          <p>This page is located in forum subdomain.</p>
          <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>
    
  4. Öffnen Sie die Datei mit dem Namen "hosts", die sich in %SystemDrive%\windows\system32\drivers\etc\ befindet, und fügen Sie die folgenden beiden Zeilen am Ende der Datei hinzu:

    127.0.0.1 forum_localhost
    127.0.0.1 blog_localhost
    

    Nachdem Sie diese Zeilen hinzugefügt haben, öffnen Sie einen Webbrowser und navigieren Sie zu http://blog_localhost/blog/article.aspx und http://forum_localhost/forum/forum.aspx und überprüfen Sie, ob die Seiten im Browser ordnungsgemäß gerendert wurden.

Erstellen einer globalen Neuschreibregel

Zunächst erstellen wir eine globale Neuschreibregel, die die URL basierend auf dem Hostheader umschreibt. Wenn beispielsweise eine Anforderung an http://blog_localhost/article.aspx gestellt wurde, ändert die Regel den URL-Pfad zu "/blog/article.aspx".

Gehen Sie folgendermaßen vor, um eine globale Regel mithilfe der URL-Neuschreibung der Benutzeroberfläche im IIS-Manager zu erstellen:

  1. Wechseln zum IIS-Manager
  2. Wählen Sie in der Navigationsstrukturansicht den Serverknoten aus.
  3. Klicken Sie in der Featureansicht auf "URL-Modul neu schreiben"
    Die Screenshot der Startseite von WIN 2K8 RTM. Das Symbol
  4. Klicken Sie im Bereich "Aktionen" auf "Regeln hinzufügen..."
    Screenshot der Seite
  5. Wählen Sie im Dialogfeld "Regeln hinzufügen" "Leere Regel" aus, und klicken Sie auf "OK":
    Screenshot des Dialogfelds

Jetzt müssen wir die tatsächliche Neuschreibregel definieren. Im URL Rewrite-Modul wird die Umschreibungsregel durch Angabe von vier wesentlichen Informationen definiert.

  • Name der Regel
  • Muster für das Abgleichen der URL-Zeichenfolge
  • Optionaler Satz von Bedingungen
  • Auszuführende Aktion, wenn das Muster erfüllt wurde und alle Bedingungsprüfungen erfolgreich waren

Benennen einer Regel

Geben Sie im Textfeld "Name" einen Namen ein, der die Regel eindeutig identifiziert, z. B. "Subdomänenzuordnung".

Definieren eines Musters

Geben Sie im Textfeld "Muster" die folgende Zeichenfolge ein:

(.*)

Diese Zeichenfolge ist ein regulärer Ausdruck, der angibt, dass das Muster jeder URL-Zeichenfolge entspricht, einschließlich einer leeren Zeichenfolge und die übereinstimmende Zeichenfolge in einem Back-Reference erfasst.

Definieren einer Bedingung

Klicken Sie auf die Schaltfläche "Bedingungen hinzufügen":

Screenshot der Seite

Klicken Sie auf "Hinzufügen...". zum Aufrufen des Dialogfelds zum Definieren von Bedingungen.

Screenshot der Seite
Geben Sie für "Bedingungseingabe:" diese Zeichenfolge ein: "{HTTP_HOST}". Dadurch wird das URL-Umschreibungsmodul so konfiguriert, dass der Wert des HTTP-Anforderungshostheaders als Eingabe für die Bedingung verwendet wird.

Wählen Sie im Dropdown-Kombinationsfeld "Entspricht dem Muster" aus.

Geben Sie im Textfeld "Muster" "^([^_]+)_[^_]+" ein. Dieser reguläre Ausdruck wird verwendet, um die von uns erstellten Domains (blog_localhost und forum_localhost) abzugleichen und den Teil der Zeichenfolge vor dem "_" Symbol in eine Rückreferenz zu erfassen. Zum Beispiel wird bei der Zeichenkette "blog_localhost" das "blog" in der Rückreferenz beibehalten.

Nachdem alle Eigenschaften angegeben wurden, sollte das Bedingungsdialogfeld wie folgt aussehen:

Screenshot des Dialogfelds

Klicken Sie auf "OK", um die Bedingung zu speichern und zur Benutzeroberfläche "Regel hinzufügen" zurückzukehren.

Definieren einer Aktion

Da die von uns erstellten Regel die URL neu schreiben soll, wählen Sie den Aktionstyp "Neu schreiben" im Gruppenfeld "Aktion" aus. Geben Sie im Textfeld "URL neu schreiben:" die folgende Zeichenfolge ein:

{C:1}/{R:1}

Diese Zeichenfolge gibt an, in welche Eingabe-URL umgeschrieben werden soll. Der Rückverweis auf die Bedingung "{C:1}" wird als Name des Ordners verwendet, und dann wird das im Regelmuster erfasste Element mithilfe von Rückverweis auf die Regel "{R:1}" beibehalten.

Behalten Sie die Standardwerte für alle anderen Einstellungen bei. Die Benutzeroberfläche "Regel bearbeiten" sollte wie die folgende Seite aussehen:

Screenshot der Seite

Speichern Sie die Regel, indem Sie rechts auf die Aktion "Übernehmen" klicken.

Um zu verstehen, wie diese Regel angewendet wird, gehen wir durch die Schritte, die vom URL-Neuschreibmodul ausgeführt werden, wenn der HTTP-Client diese URL anfordert:
http://blog_localhost/article.aspx?id=323:

  1. Das URL-Umschreibmodul übergibt "article.aspx?id=323" als Eingabe-URL an die Regel, stimmt es erfolgreich mit dem Regelmuster überein und erfasst es in einem Regelrückverweis {R:1}
  2. Der Hostheaderwert ("blog_localhost") wird erfolgreich mit dem regulären Ausdruck "^([^_]+)_[^_]+" abgeglichen und als Ergebnis wird "Blog" in einem Bedingungsrückverweis {C:1} erfasst.
  3. Gemäß der Ersetzungszeichenfolge {C:1}/{R:1} wird die URL in "blog/article.aspx?id=323" umgeschrieben.

Testen der Regel

Um zu testen, dass die Regel die URL richtig umschreibt, öffnen Sie den Internetbrowser, und fordern Sie die folgende URL an:
http://blog_localhost/article.aspx?id=123

Screenshot der Testseite des U R L Rewrite Module. Die Servervariableninformationen und die Wertinformationen werden angezeigt.

Sie sollten sehen, dass das URL-Umschreibungsmodul die URL geändert und eine Article.aspx Seite im Verzeichnis "Blog" geöffnet hat. Die vom URL-Umschreibmodul vorgenommenen Änderungen basieren auf den Informationen, die aus dem Hostheader extrahiert wurden.

Ähnlich wird die URL bei der Anforderung http://forum_localhost/forum.aspx?id=345 in /forum/forum.aspx?id=345 umgeschrieben.

Erstellen verteilter Regeln

Die soeben erstellte globale Regel wurde verwendet, um die Anforderung einem Ordner basierend auf den informationen zuzuordnen, die aus dem Hostheader extrahiert wurden. Jetzt erstellen wir verteilte Regeln, mit denen wir urls ohne Abfragezeichenfolgenparameter haben können. Die verteilten Regeln verwenden die URL, die bereits durch eine globale Regel geändert wurde, als Eingabe und nehmen weitere Modifikationen daran vor. Dies gilt insbesondere für:

  • Eine Neuschreibregel im Ordner "Blog" schreibt DEN URL-Pfad von "article/234/some-title" in "article.aspx?id=234&title=some-title" um.
  • Eine Umschreibungsregel im Ordner "forum" schreibt DEN URL-Pfad von "topic/123/some-topic-title" in "forum.aspx?topic=some-topic-title&id=123" um.

Lokale Regeln können entweder mithilfe des IIS-Managers oder durch Bearbeiten web.config Dateien erstellt werden. Zu Demonstrationszwecken erstellen wir die Regeln durch manuelles Bearbeiten web.config Dateien.

So erstellen Sie verteilte Neuschreibregeln:

  1. Erstellen Sie eine leere web.config Datei im %SystemDrive%\inetpub\wwwroot\**blog** Ordner. Öffnen Sie ihn im Text-Editor, und fügen Sie dann den folgenden XML-Code in ihn ein:

    <?xml version="1.0" encoding="UTF-8"?>
    <configuration>
      <system.webServer>
        <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>
      </system.webServer>
    </configuration>
    
  2. Erstellen Sie eine leere web.config Datei im %SystemDrive%\inetpub\wwwroot\**forum** Ordner. Öffnen Sie ihn im Text-Editor, und fügen Sie dann den folgenden XML-Code in ihn ein:

    <?xml version="1.0" encoding="UTF-8"?>
    <configuration>
      <system.webServer>
        <rewrite>
          <rules>
            <rule name="Rewrite to forum.aspx">
              <match url="^topic/([0-9]+)/([_0-9a-z-]+)"/>
              <action type="Rewrite" url="forum.aspx?topic={R:2}&amp;id={R:1}"/>
            </rule>
          </rules>
        </rewrite>
      </system.webServer>
    </configuration>
    

Testen von globalen und verteilten Regeln

Um zu testen, dass alle Regeln ordnungsgemäß funktionieren, öffnen Sie einen Webbrowser, und stellen Sie eine Anforderung an http://blog_localhost/article/234/some-title. Die Antwort im Browser sollte angeben, dass die URL zuerst durch eine globale Regel geändert wurde und dann von einer verteilten Regel zusätzlich geändert wurde.

Wenn Sie http://forum_localhost/topic/123/some-topic-title anfordern, sollten Sie sehen, dass das URL-Umschreibemodul die angeforderte URL-Zeichenfolge in "/forum/forum.aspx?topic=some-topic-title&id=123" ändert.

Screenshot der Testseite des U R L Rewrite Module. Die U R L-Zeichenfolge wurde geändert.

Zusammenfassung

In diesem Lernprogramm haben Sie ein Szenario für die Unterdomänenzuordnung mithilfe einer globalen Regel implementiert und dann verteilte Regeln verwendet, um benutzerfreundliche URLs für Webseiten in diesen Ordnern zu ermöglichen.