2013-06-12 2 views
6

Für lokale Entwicklungstests muss ich alle Anfragen an www.somedomain.com/XXX abfangen (wobei X der Pfad ist) und sie an localhost/somevdir/XXX senden.URL-Rewrite-Regel für eine bestimmte Domäne einrichten

Ich habe hinzugefügt, diese auf meine HOSTS-Datei (c: \ windows \ system32 \ drivers \ etc):

127.0.0.1 www.mydomain.com 

Dann in IIS8 (Windows 8), ich habe eine Bindung an meine hinzugefügt "Standardwebsite" für den Host www.mydomain.com. Das funktioniert, ich kann jetzt www.mydomain.com/test.html durchsuchen und eine Test-HTML-Seite sehen. Mein virtuelles Verzeichnis befindet sich auf der Standard-Website. Ich füge dann eine URL URL für das letzte Bit auf der Website neu schreiben:

Aber - das funktioniert nicht. Ich bekomme einen 404, also sieht es so aus, als würde das Spiel nie passieren. Ich habe versucht Redirect und Rewrite, und ich habe versucht, ohne die^in der Regex und ein paar andere Regex Tweaks. Kann mir jemand erklären, was ich falsch gemacht habe?

Antwort

12

Ich denke, die folgenden Arbeiten:

<rule name="mydomain.com" stopProcessing="true"> 
    <match url="(.*)" /> 
    <conditions logicalGrouping="MatchAll"> 
     <add input="{HTTP_HOST}" pattern="^(mydomain\.com|www\.mydomain\.com)$" /> 
     <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" /> 
    </conditions> 
    <action type="Redirect" url="http://localhost/MyVDir/{R:1}" redirectType="Temporary" /> 
</rule> 

Das Spiel auf einem beliebigen URL sicher macht die Bedingungen geprüft und der HTTP_HOST Server-Variable scheint den zuverlässigste Weg, um die angeforderten Hostnamen zu überprüfen. Sie könnten die Eingabebedingung REQUEST_FILENAME entfernen, aber es funktioniert als eine ziemlich gute Plausibilitätsprüfung, um sicherzustellen, dass statische Dateien immer bedient werden.

+0

Fast :) Ich hatte eine Umleitung zu verwenden (Rewrite funktionierte nicht), und hatte den vollständigen Pfad mit dem Host zu spezifizieren ('http: // localhost/MyVDir/{R: 1}') aber sobald ich das getan hatte, war ich in :) –

+0

Sollten Sie nicht die Perioden im Muster für Ihre Domain-Namen entkommen?^((mydomain \ .com) | (www \ .mydomain \ .com)) $ –

+0

Guter Punkt, glücklicherweise ist das beliebige Zeichen, das aus Perioden zusammenpasst, wahrscheinlich kein Problem, da die meisten Leute kein wwwXmydomain.com haben, wo X ist ein zufälliger Brief. Die zusätzlichen Klammern werden nicht benötigt. –

0

Dies ist besser für beide WWW. und nicht www. Versionen der Domäne (Klammern mit der Option? Zeichen bedeuten optional in regulären Ausdrücken), so dass Sie die Domäne nicht zweimal schreiben müssen, was möglicherweise zu Fehlern führen könnte, da es doppelt so wahrscheinlich ist, einen Tippfehler zu schreiben.

<rule name="mydomain.com" stopProcessing="true"> 
    <match url="(.*)" /> 
    <conditions logicalGrouping="MatchAll"> 
     <add input="{HTTP_HOST}" pattern="^(www.)?mydomain\.com)$" /> 
     <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" /> 
    </conditions> 
    <action type="Redirect" url="http://localhost/MyVDir/{R:1}" redirectType="Temporary" /> 
</rule> 
Verwandte Themen