2010-11-12 11 views
5

Ich habe die Anweisungen Learn IIS's webpage für das Hinzufügen von statischen Weiterleitungen mit einer Neuschreibmaske für meine asp.net-Anwendung gefolgt. ASP.NET/IIS7 Url Rewrite Karten funktioniert nicht

Das Folgende ist die config:

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

Und

<rewriteMaps> 
    <rewriteMap name="Information"> 
     <add key="/Information/CorporateSales.aspx" 
      value="/KB/Information/CorporateSales" /> 
     <add key="/Information/ComputerRepair.aspx" 
      value="/KB/Information/ComputerRepair" /> 
    </rewriteMap> 
</rewriteMaps> 

Dies wurde auch ursprünglich vom Assistenten in IIS Manager erstellt für die Verwendung von Rewrite-Karten.

Also ist die Idee, dass ->/KB/Information/CorporateSales mit einem 301 Redirect (MOVED DAUERHAFT).

Allerdings bekomme ich nur die ursprüngliche aspx-Seite (die wir später entfernen) laden. Ich habe sogar die Datei gelöscht, wenn es zu einer vorhandenen Ressource defaulting war, und damit ich nur ein einfaches 404 ohne die Umleitung erhalte.

Wer hat eine Idee?

mich etwas klarstellen lassen:

Rewrite Modul arbeitet, ist es installiert und ausgeführt wird. Meine Standard-Regex-Regeln funktionieren gut. Aber meine Karte überschreiben nicht.

Antwort

-2

Haben Sie den App-Pool und die IIS-Site zurückgesetzt?

In einigen Fällen kann es bis zu 72 Stunden (iirc) dauern, bis es sich weltweit ausbreitet.

+0

Dies ist eine lokale dev-Maschine, und ich habe nicht nur den App-Pool, sondern auch alle iis zurückgesetzt. – Aren

0

Haben Sie Url Rewriting als Teil von IIS7/7.5 installiert? Dies ist nicht standardmäßig installiert. Stellen Sie außerdem sicher, dass Ihr App-Pool auf den integrierten Pipline-Modus eingestellt ist, kein Klassiker.

bearbeiten

Daraus:

http://learn.iis.net/page.aspx/469/using-rewrite-maps-in-url-rewrite-module/

Das einzige, was ich sehe, dass Sie das Attribut 'Stopprocessing' fügt tun. Hast du versucht, das zu entfernen?

+0

Es ist installiert und integriert – Aren

2

Ich hatte ein ähnliches Problem und habe diese Frage gefunden. Es dauerte eine Weile, aber ich konnte herausfinden, was das Problem war.

Meine rewriteMap enthielt die URLs "/Default2.aspx" und "/Dashboard.aspx".

Wenn ich zu Default2.aspx gehen würde, würde ich 404 erhalten, anstatt wie erwartet auf Dashboard.aspx umgeleitet zu werden.

Das Problem, das ich fand, war, dass auf meinem Computer die Anwendung in einem Unterverzeichnis ausgeführt wurde. Die rewriteMap-Pfade funktionieren nur, wenn ich den vollständigen Pfad (einschließlich des Anwendungsordners) verwende, z. B. "/TestSite/Default2.aspx".

So hätte ich doppelte Einträge in meiner rewriteMap hinzufügen können, um Anwendungsverzeichnisse auf Entwicklermaschinen zu berücksichtigen, aber das schien chaotisch. Ich habe mir die anderen Rewrite-Regeln in der Anwendung angesehen, in denen dieses Problem nicht aufgetreten ist, und mir ist aufgefallen, dass sie die Variable {REQUEST_FILENAME} anstelle von {REQUEST_URI} verwendet haben. Daher habe ich die Regel so geändert, dass {REQUEST_FILENAME} verwendet wird, und entferne den ersten Schrägstrich von den URLs in meiner rewriteMap.

0

Zuvor hatte ich das selbe Problem wie beschrieben.

Könnten Sie Ihren Code

<match url="(.*)" /> 

aktualisieren und ich hoffe, dass Sie sich bewusst,

<add input="{Information:{REQUEST_URI}}" pattern="(.+)" /> 

diese Bedingung erfassen vollständige URL mit Ausnahme der Domäne. Beispiel auf dieser url: www.example.com/Information/CorporateSales.aspx wird es Anpassungsbedingung von Information/CorporateSales.aspx auf RewriteMap überprüfen

und sicher, es wird nicht mit dieser URL sein Spiel

www.example.com/old/Information/CorporateSales.aspx

5

Dieser Artikel http://www.iis.net/learn/extensions/url-rewrite-module/using-rewrite-maps-in-url-rewrite-module und Code unten gearbeitet mich.

<rewrite> 
    <rules> 
     <rule name="Redirect rule1 for RedirectURLs"> 
      <match url=".*" /> 
      <conditions> 
       <add input="{RedirectURLs:{REQUEST_URI}}" pattern="(.+)" /> 
      </conditions> 
      <action type="Redirect" url="{C:1}" appendQueryString="false" /> 
     </rule> 
    </rules> 
    <rewriteMaps> 
     <rewriteMap name="RedirectURLs"> 
      <add key="/privacy.php" value="/privacy" /> 
     </rewriteMap> 
    </rewriteMaps> 
</rewrite>