2010-04-27 11 views
13

Wie kann ich eine Weiterleitungs-URL für ein virtuelles Verzeichnis in IIS 7.0 festlegen? Ich habe das neueste URL-Rewrite-Modul 2.x installiert.IIS-Weiterleitungs-URL für virtuelles Verzeichnis

Ich habe eine Website auf meinem IIS 7.0-Server, www.mysite.com:

Ich kann mein Problem mit einem Beispiel erklären. Ich habe beschlossen, unter meiner Site ein virtuelles Verzeichnis "sales" anzulegen, das auf das Stammverzeichnis der Website verweist. Jetzt muss ich eine Weiterleitungs-URL für das vdir erstellen. Das vdir verweist auf dasselbe virtuelle Stammverzeichnis wie das Stammverzeichnis meiner Site.

Die große Idee ist, dass ich auf www.mysite/sales gehen kann und ich werde automatisch auf www.mysite.com?productid=200 umleiten.

Ich habe versucht, mit einer Rewrite-URL für vdir (nicht Website) zu umleiten, aber ich diese Fehlermeldung immer erhalten:

Cannot add duplicate collection entry of type 'rule' with unique key 
attribute 'name' set to "test". 

Dies geschieht, wenn ich auf den virtuellen vdir bin zeigen und versuchen, eine Regel hinzufügen .

Ich kann Regeln auf der Website-Ebene hinzufügen, aber Regeln funktionieren nicht. Ich meine URL "www.mysite/sales" gibt mir den folgenden Fehler. Ich weiß, dass der Schlüssel einzigartig ist. Ich habe es aus web.config überprüft.

Diese Art von Feature war wirklich einfach in IIS 6.0, zeigen Sie einfach auf Vdir mit der Maus und legen Sie Eigenschaften -> eine Weiterleitung an die URL.

Bitte erläutern Sie, was der richtige Weg ist, um es in IIS 7.0 zu tun?

+0

Siehe auch [URL Rewrite von einem Unterverzeichnis einer anderen Domäne mit IIS] (https://stackoverflow.com/questions/22392522/url-rewrite-of-a-subdirectory-to-a-different- Domain-using-iis) auf Weiterleiten statt Umleiten. – Vadzim

Antwort

28

Eigentlich nicht ganz so einfach, aber nicht zu schrecklich.

1) Erstellen Sie ein physisches Verzeichnis anstelle eines virtuellen Verzeichnisses.

2) Stellen Sie sicher, dass Sie über HTTP Redirect-Rollendienste verfügen. Siehe http://www.iis.net/ConfigReference/system.webServer/httpRedirect

3) Öffnen Sie den IIS-Manager und navigieren Sie zum physischen Verzeichnis, das Sie umleiten möchten.

4) Doppelklicken Sie auf das Symbol "HTTP Redirect" unter IIS.

5) Überprüfen Sie die Box „zu diesem Ziel Anfragen umleiten“ und die neue URL (http://example.com/newPage.html)

6) Überprüfen Sie die nächsten zwei Boxen nach Bedarf eingeben; Ich finde es normalerweise notwendig, beides zu überprüfen.

7) Drücken Sie die Schaltfläche Übernehmen.

8) Wählen Sie Website und "Neustart" unter Website verwalten.

9) Test.

+0

Gute Antwort, +1 – ajdams

+0

Vielen Dank das half –

+0

Arbeitete großartig, aber ich musste die Website in IIS 8.5 nicht neu starten. –

2

Der Grund dafür ist, dass standardmäßig alle Regelkonfigurationen von den übergeordneten Webanwendungen übernommen werden. Wenn also eine Regel in der Root-Website definiert ist, wird sie auf allen nachfolgenden untergeordneten Websites in der Hierarchie vererbt; es sei denn, es ist gelöscht.

So zum Beispiel, wenn die Hierarchie II-Anwendung wird wie folgt -

Standard-Website (Root)

| Webanwendung 1 (VDir1) | Webunteranwendung 11 (VDir2)

| Web Application 2 (VDir3)

Die Regel mit dem Namen 'Test', wenn vorhanden in der Root-Anwendung, wird es auf Web Application geerbt 1, Web Application 11 und Web Application 2

In Ihrem Fall Web Anwendung 11 (VDir2) befindet sich physikalisch an der gleichen Stelle wie (VDir1). Daher sind die IIS-Konfigurationen für beide Verzeichnisse identisch, da sie dieselbe Web.config-Datei verwenden.

Jede neue Regel, die der Datei Web.config hinzugefügt wird, wird automatisch auf diese beiden virtuellen Verzeichnisse angewendet (VDir1 & VDir2). Und da Regeln standardmäßig vererbt werden, findet die Regel-Engine in IIS beim Analysieren der Regel ein Problem, da sie bereits durch Vererbung existiert.

Eine mögliche Lösung wäre das Hinzufügen eines < Clear /> - Tags, bevor eine Regel in der Datei web.config hinzugefügt wird, sodass alle geerbten Regeln gelöscht werden.

<rewrite> 
    <rules> 
    <clear/> 
    <rule name="test" stopProcessing="true"> 
     <match xxx /> 
     <action xxx /> 
    </rule> 
    </rules> 
</rewrite> 

Allerdings würde ich es vorziehen, den < Remove name = ‚Regelname‘ /> Tag statt nur die Regel gezielt zu entfernen, die in der geerbten Konfiguration hinzugefügt werden müssen. Dies würde sicherstellen, dass alle anderen Regeln auf der Root-Website in der Hierarchie vererbt werden; mit nur dieser neuen Regel, die (irgendwie) außer Kraft gesetzt wird.

<rewrite> 
    <rules> 
    <remove name="test"/> 
    <rule name="test" stopProcessing="true"> 
     <match xxx /> 
     <action xxx /> 
    </rule> 
    </rules> 
</rewrite> 
+0

Funktioniert das tatsächlich? Das ist Genie. – Gaspa79

+0

@ Gaspa79, das ist sicher. Sie könnten es versuchen und Ihre Ergebnisse veröffentlichen. – XpertSiji

+0

Ja, ich habe es versucht und Wunder gewirkt. Danke vielmals! – Gaspa79

Verwandte Themen