IIS Rewrite, Mewrite Maps und Abfragezeichenfolgen

10

Bitte helfen Sie mir, das Umschreiben von Karten zu verstehen. Ich habe dieses Setup:

<rewriteMap name="MyMap">
   <add key="/pages" value="/website/pages/index.aspx" />
   <add key="/pages/page-1" value="/website/pages/page-1/index.aspx" />
   <add key="/pages/page-1/section-1" value="/website/pages/page-1/section-1.aspx" />
</rewriteMap>

Hier ist meine Regel:

<rule name="Rewrite rule for MyMap" stopProcessing="true">
   <match url=".*" />
   <conditions logicalGrouping="MatchAll" trackAllCaptures="false">
      <add input="{MyMap:{REQUEST_URI}}" pattern="(.+)" />
   </conditions>
   <action type="Rewrite" url="{C:1}" appendQueryString="true" />
</rule>

Dies funktioniert, wenn ich versuche, auf diese Seiten zuzugreifen:

  • www.mydomain.com/pages (OK)
  • www.mydomain.com/pages/page-1 (OK)
  • www.mydomain.com/pages/page-1/section-1 (OK)

Ich möchte jedoch die Möglichkeit haben, auf jeder dieser Seiten eine Abfragezeichenfolge hinzuzufügen. Beispiel:

  • www.mydomain.com/pages?page=1 (FAIL)

Wenn ich versuche, auf diese Seite zuzugreifen, erhalte ich eine 404. Wie kann ich diese zum Laufen bringen?

Martin
quelle

Antworten:

12

Standardmäßig werden URL-Umschreiberegeln mithilfe von Umschreibungszuordnungen erstellt, die mit der Variablen {REQUEST_URI} übereinstimmen. Dies beinhaltet die URL + die Abfragezeichenfolge. Auf diese Weise können Sie URLs mit Abfragezeichenfolgenparametern abgleichen und auf andere Seiten umschreiben. Sehr praktisch, aber dies ist anscheinend nicht das, was Sie wollen / brauchen.

Sie möchten nur mit der URL ohne die Abfragezeichenfolge übereinstimmen. Um dies zu ändern, müssen Sie {REQUEST_URI} in der Bedingung durch {URL} ersetzen . Dann wird nur die URL (ohne Abfragezeichenfolge) mit der Umschreibekarte abgeglichen. Anschließend können Sie die Abfragezeichenfolge zur neu geschriebenen URL hinzufügen, sodass das ausgeführte Skript weiterhin Zugriff darauf hat.

Sie erhalten eine Regel wie:

<rule name="Rewrite rule for MyMap">
    <match url=".*" />
    <conditions>
        <add input="{MyMap:{URL}}" pattern="(.+)" />
    </conditions>
    <action type="Rewrite" url="{C:1}" appendQueryString="true" />
</rule>
Marco Miltenburg
quelle
1
Tolle Erklärung. Ich hatte mich gefragt, wie ich den QueryString auch für Übereinstimmungszwecke ignorieren kann.
Dthrasher