2017-06-02 5 views
0

Ich frage mich, ob es möglich ist, eine Rewrite-Regel einzurichten, wo Sie nicht die Domäne angeben, nur die Seite zugegriffen und die Seite zu umleiten. Mein Ziel dafür ist, dass ich nicht verschiedene Versionen der gleichen Regel für verschiedene Sites haben muss (z. B. dev.mysite.com, qa.mysite.com usw.), sodass eine Regel für mehrere Subdomains funktioniert. Zum Beispiel muss ich jemanden umleiten, der zu dev.mysite.com/mexico zu mx.dev.mysite.com/es/mexico geht, aber das muss auch für QA funktionieren. Außerdem hat die Produktion eine etwas andere Domäne, die das noch schwieriger machen würde. Das ist, was ich herausgefunden habe - es braucht definitiv Arbeit:Rewrite-Regel, die für verschiedene Domänen und Subdomains funktioniert

<rule name="Test Mexico Redirect"> 
    <match url="^mexico"/> 
    <action type="Redirect" url="http://mx.{R:2}/es/mexico" redirectType="Permanent"/> 
</rule> 

Leider funktioniert es einfach nicht; Ich bekomme eine leere Seite. Wahrscheinlich, weil {R: 2} nach der Domäne in der Regel sucht und eine nicht angegeben ist. Ich kann mir keinen Weg vorstellen, dies zu tun, weil nicht einmal die Domäne in allen Umgebungen gleich ist.

Es wäre cool, wenn Sie regex im <action> Element verwenden könnten, dann würde ich so etwas tun: ^(mx\.).*com/es/mexico.

Antwort

0

Es ist möglich, {HTTP_HOST} und zurück Referenzen wie {C:#} zu verwenden. Das IIS Rewrite-Modul ist sehr nützlich, um dies einzurichten. Hier ist ein Screenshot mit einigen Anmerkungen, die erklärt, wie es gemacht wird:

enter image description here

Durch die Verwendung von {HTTP_HOST} und Bedingungen konnte ich eine Rewrite-Regel machen, die für alle Umgebungen anwenden können. Das tatsächliche XML-Ergebnis:

<rule name="Mexico Redirect" stopProcessing="true"> 
    <match url="mexico" /> 
    <conditions> 
     <add input="{HTTP_HOST}" pattern="^((?!mx))" /> 
     <add input="{CACHE_URL}" pattern="^(.+)://" /> 
    </conditions> 
    <action type="Redirect" url="{C:1}://mx.{HTTP_HOST}/es/search" redirectType="Temporary" /> 
    </rule> 

Auch kann ich gewesen falsch hat sagen Sie nicht den app-Pool mit einer temporären (307) umleiten recyceln müssen. Ich musste es immer noch recyceln, aber nur in der Produktion ... noch kein Urteil darüber.

Verwandte Themen