2017-12-28 18 views
1

Ich habe eine sehr einfache URL Rewrite Umleitungsregel, die zu einer Endlosschleife führt. Wenn es fehlschlägt, wird die Fehlermeldung "Kann nicht angezeigt werden" angezeigt. Irgendwelche Fehlerfallen Tipps oder Skript-Änderungen würden geschätzt werden.URL Rewrite Schleife in IIS

<rewrite> 
    <rules> 
     <rule name="Test redirect" enabled="false" stopProcessing="true"> 
      <match url=".*" /> 
     <action type="Redirect" url="/pub/" appendQueryString="false" logRewrittenUrl="true" redirectType="Permanent" /> 
      <conditions logicalGrouping="MatchAny"> 
       <add input="{HTTP_HOST}" pattern="^mydomain.*(com|net)$" /> 
      </conditions> 
     </rule> 
    </rules> 
</rewrite> 
  • Die Regel wird in dem Wwwroot-Ordner web.config-Datei.
  • Die Regel leitet zu einer MVC-Anwendung im Ordner wwwroot/pub/um.
  • Das IIS-Protokoll zeigt, dass der/pub/-Ordner mehrmals in der Schleife aufgerufen wird, bis die Anforderung von IIS beendet wird.
  • Wenn die Regel deaktiviert ist und ich die URL direkt eingeben, funktioniert es einwandfrei.
  • Der gleiche Fehler wird in verschiedenen Browsern angezeigt.
  • Es ist kein Browser-Cache-Problem.

+0

Können Sie Ihre URL Rewrite Regel hier einfügen? –

+0

Aus irgendeinem seltsamen Grund erlaubt Stackoverflow es mir nicht, die Regel in die Frage einzufügen. Vielleicht sind es die Aufzählungspunkte. Ich werde es unten einfügen. –

+0

\t

Antwort

1

Das Problem stellte sich heraus, im Zusammenhang mit SSL. Eine HTTPS-Weiterleitung erfordert eine {HTTPS} -Bedingung, wie unten gezeigt. Ohne diese Bedingung wird die Regel wiederholt, wenn Sie versuchen, auf eine https: \ URL umzuleiten. Sie müssen auch die gesamte https: \ URL in die Aktion einfügen, wie in der Abbildung gezeigt.

<rule name="Test redirect" enabled="true" stopProcessing="true"> 
    <match url=".*" /> 
    <action type="Redirect" url="https://yourdomain.com/pub/" appendQueryString="false" logRewrittenUrl="true" redirectType="Temporary" /> 
    <conditions logicalGrouping="MatchAll"> 
     <add input="{HTTP_HOST}" pattern="^yourdomain.*(com|net)$" /> 
     <add input="{HTTPS}" pattern="off" /> 
    </conditions> 
</rule> 
0

Es ist wie Ihre URL scheint Regel Redirect wird mehrere Male getroffen zu werden, da sie alle URLs über die <match url=".*" /> Richtlinie über zusammenbringt. This post says that Die Richtlinie stopProcessing='true' funktioniert nicht unbedingt für Umleitungsregeln.

Taking a look at a similar question, Sie könnten eine block Regel zuerst, um mit dem Fragment mydomain.com/pub von alle URLs zu verhindern hinzufügen möchten keine Regeln für das Umschreiben Triggerung und Ihre Endlosschleife Szenario eingeben:

<rule name="block" stopProcessing="true"> 
    <match url="^mydomain.*(com|net)/pub.*" /> 
    <action type="None" /> 
</rule> 
+0

Danke Adil, aber es ist immer noch Looping. Ich kann eine Umleitung mithilfe von Regeln mit einer web.config-Datei durchführen, die sich im Webanwendungsordner befindet. Es scheint jedoch fehlzuschlagen, wenn die Regel auf die Datei web.config im Ordner wwwroot angewendet wird. Irgendwelche Ideen? –