2009-04-04 6 views
4

Ich schrieb diese Frage auf und zwang mich dazu ein wenig härter zu denken und beantwortete es selbst, obwohl ich immer noch nicht ganz verstehe, warum es gelöst wurde.IIS 7 Url Rewriting und zwei Domains

Ich habe ein Konto auf einem freigegebenen Host mit 2 Domänen registriert. Ich benutze den Asp.Net-Stack, um ein paar Dinge wie einen Blog und eine andere Seite, die ich plane, zu starten, laufen zu lassen. Beide meiner Domains zeigen auf die Wurzel; Das erste ist das Original, mit dem ich mich angemeldet habe, das zweite ist ein Root-Domain-Pointer, den ich hinzugefügt habe. Hier ist, wie ich es verhalten soll:

Verzeichnisstruktur:

 
Root      (www.domain1.com) 
Root --\ Blog    (www.domain1.com/blog) 
Root --\ Site2   (should be directed here if www.domain2.com) 
Root --\ Site2 --\ Junk (www.domain2.com/junk) 

Gerade jetzt, wenn Sie in www.domain1.com oder www.domain1.com/blog geben, die wie erwartet und ich verhält Mir geht es gut. Für www.domain2.com habe ich die Rewrite-Regel wie folgt konfiguriert (aus der web.config):

<rule name="Domain2"> 
    <match url="(.*)(/)?" ignoreCase="false" /> 
    <conditions logicalGrouping="MatchAll"> 
     <add input="{HTTP_HOST}" pattern="(www\.)?domain2\.com" ignoreCase="false" /> 
    </conditions> 
    <action type="Rewrite" url="/site2/{R:1}" /> 
</rule> 

Diese Regel jeden Pfad übereinstimmen soll, wenn der Host domain2.com ist, den Pfad pflücken zu der angeforderten Ressource und formatieren Sie sie ordnungsgemäß. Wenn jemand also www.domain2.com/junk/default.aspx eintippt, löst sich dies in IIS auf www.domain2.com/site2/junk/default.aspx auf, ohne dass der Benutzer es jemals weiß. Dies ist meist funktioniert wie angegeben, außer wenn der Benutzer einen abschließenden Schrägstrich in einem Unterordner nicht eingeben. IE:

www.domain2.com (Werke)
www.domain2.com/ (Werke)
www.domain2.com/junk/ (Werke)
www.domain2.com/junk (doesn arbeite nicht!) IIS 7 verliert hier sein Gehirn und formatiert es wie www.domain2.com/site2/junk, weil eine zweite Anfrage automatisch für den abschließenden Schrägstrich ausgegeben wird und ein 404 passiert.

Also, aktualisiere ich die Aktion sein:

<action type="Rewrite" url="/site2/{R:1}/" /> 

Dies scheint es gelöst zu haben, aber warum nicht IIS 7 jetzt www.domain2.com/junk2/default.aspx/ ausspucken? Woher weiß es, an eine Dokumenterweiterung keinen Schrägstrich anzuhängen?

Antwort

3

www.domain2.com/junk funktioniert nicht, weil Sie einen Schrägstrich in die Übereinstimmung eingefügt haben, die tatsächliche URL jedoch nicht enthält. Es enthält nur "Müll".

Auch müssen Sie hinzufügen:

<rule name="Domain2" stopProcessing="true">

so dass es nicht andere Regeln bewerten, wenn Übereinstimmung gefunden wird. Ich vermute, dass Sie sehen, dass das, was Sie verwirrt, andere Regeln sind, die Sie eingerichtet haben.