Frage

Ich bin mit Mod Rewrite für IIS 7.0 von iis.net und will Anfragen umleiten:

Ich habe 2 Regeln erstellt:

<rule name="ID">
   <match url="/users/([0-9])" />
   <action type="Rewrite" url="/User.aspx?id={R:1}" />
</rule>
<rule name="Name">
   <match url="/users/([a-z])" ignoreCase="true" />
   <action type="Rewrite" url="/User.aspx?name={R:1}" />
</rule>

Es geht einen Test in iis mmc Test-Dialog, aber nicht in Debug (URL wie http: // localhost: 9080 / example.com / users / 1 oder ... / users / foo ) und nicht auf realen IIS

Was habe ich falsch gemacht?

War es hilfreich?

Lösung

Das offensichtliche Problem ist, dass Ihre aktuellen regulären Ausdrücke nur ein Zeichen im Benutzername oder eine Nummer übereinstimmen. Sie benötigen ein Plus quantifier in Klammern hinzuzufügen, um mehrere Buchstaben oder Zahlen übereinstimmen. Siehe Diese Seite für weitere Informationen über regex quantifiers. Beachten Sie, dass Sie nicht schlicht URLs wie „/ users /“ werden passend (keine ID oder Name). Stellen Sie sicher, das ist, was Sie bestimmt.

Das andere Problem, das Sie in laufen ist, dass IIS Start Rewrite-Regeln aus dem ersten Zeichen nach dem ersten Schrägstrich auswertet. So Ihre Regel /users/([0-9]) passen nicht alles akzeptiert, weil, wenn die Regex Auswertung geschieht, wird die URL wie folgt aussieht users/foo nicht /users/foo. Die Lösung ist ^ zu verwenden (die der reguläre Ausdruck Charakter ist, die „Beginn der Zeichenfolge“ bedeutet) zu Beginn des Musters anstelle einem Schrägstrich. Wie folgt aus:

<rule name="ID">
    <match url="^users/([0-9]+)" />
    <action type="Rewrite" url="/User.aspx?id={R:1}" />
</rule>
<rule name="Name">
    <match url="^users/([a-z]+)" ignoreCase="true" />
    <action type="Rewrite" url="/Users.aspx?name={R:1}" />
</rule>

Beachten Sie, dass Sie Users.aspx für eine dieser URLs und User.aspx (kein Plural) für das andere Wahl sind. Stellen Sie sicher, das ist, was Sie bestimmt.

BTW, die Art, wie ich diese Dinge herausgefunden wurde, indem Sie IIS Anforderungsfehler Rewrite-Regeln zu beheben Tracing . Dies machte diese einfach zu diagnostizieren. Ich konnte eine Testanforderung machen und die Spur durchschauen zu finden, wo jede Rewrite-Regel ausgewertet wird (es ist in einem Abschnitt der Spur namens „PATTERN_MATCH“ Für den besonderen PATTERN_MATCH für ein Ihre Regeln, ich das sah.

  

-PATTERN_MATCH
  Pattern / users / ([0-9] +?)
  InputURL Benutzer / 1 |   Negieren falsch
  Abgestimmte false

Beachten Sie das Fehlen des beginnenden Schrägstrich.

Andere Tipps

Sie sollten verwenden <match url="/users/([0-9]+)" /> und <match url="/users/([a-z]+)" ignoreCase="true" /> jeweils den kompletten ID / Benutzer anzupassen und nicht nur ihre ersten Buchstaben / Ziffer. Aber ich weiß nicht, warum Ihre regex auf einem einstelligen gescheitert wären, so muss es ein anderes Problem sein, auch.

Was Ihre zweite Frage, ich bin nicht sicher, ob ich völlig verstehen. Wie können Sie den Unterschied zwischen einem Ordnernamen und ein Benutzername sagen? Wird ein Ordner immer einen Schrägstrich hat?

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top