IIS7-URL-Umleitung vom Stammverzeichnis zum Unterverzeichnis [geschlossen]

83

Ich verwende Windows Server 2008 mit IIS7. Ich brauche die Nutzer, die kommen , um www.mysite.comzu wwww.mysite.com/menu_1/MainScreen.aspx. Hier ist die Dateistruktur, die ich für die Projekte habe:

-Sites
 -Default Web Site
  -Menu_1
  -MenuService
  -VscWebService

Ich werde mich über jede Hilfe sehr freuen.

user881148
quelle
Es gibt eine feine Linie zwischen Programmierung und Serververwaltung (eine Linie, die dank der Popularität von "Dev Ops" zunehmend unscharf wird). Trotzdem behalten Stack Overflow und Server Fault eine klare Unterscheidung zwischen den beiden Sites bei, und dieser Inhalt gehört zu Server Fault, da es mehr um die Konfiguration eines Tools (IIS) als um die Programmierung geht.
Machineghost

Antworten:

131

Hier ist es. Fügen Sie diesen Code Ihrer Datei web.config hinzu :

<system.webServer>
    <rewrite>
        <rules>
            <rule name="Root Hit Redirect" stopProcessing="true">
                <match url="^$" />
                <action type="Redirect" url="/menu_1/MainScreen.aspx" />
            </rule>
        </rules>
    </rewrite>
</system.webServer>

Es wird 301 Permanent Redirect ausgeführt (URL wird im Browser geändert). Wenn Sie möchten, dass eine solche "Umleitung" unsichtbar ist (Umschreiben, interne Umleitung), verwenden Sie diese Regel (der einzige Unterschied besteht darin, dass "Umleiten" durch "Umschreiben" ersetzt wurde):

<system.webServer>
    <rewrite>
        <rules>
            <rule name="Root Hit Redirect" stopProcessing="true">
                <match url="^$" />
                <action type="Rewrite" url="/menu_1/MainScreen.aspx" />
            </rule>
        </rules>
    </rewrite>
</system.webServer>
LazyOne
quelle
2
Danke für die Antwort. Es funktioniert immer noch nicht für mich. Zuerst habe ich dies zur wwwroot web.config hinzugefügt und dort nicht funktioniert. Also habe ich das URL Rewrite auf Serverebene (Server> Sites> Standardwebsite) geöffnet, aber es funktioniert immer noch nicht. Mache ich hier etwas falsch? Nochmals vielen Dank für Ihre Hilfe.
Benutzer881148
2
@ user881148 Die Regel funktioniert definitiv - ich habe sie vor dem Posten getestet. 1) Vielleicht ist es in falscher Reihenfolge platziert? Die Reihenfolge der Regeln ist wichtig: Wenn Sie bereits einige Regeln haben, fügen Sie diese Regel vor anderen Regeln hinzu. 2) "Server> Sites> Standardwebsite" - das ist nicht Serverebene - es ist die normale Standardwebsite, die vom IIS-Installationsprogramm erstellt wurde - nichts weiter. 3) Versuchen Sie, diese Regel manuell über die GUI (IIS Manager) zu erstellen - es ist einfach - nur wenige Felder müssen ausgefüllt werden. 4) Möglicherweise übernimmt Ihr ASP.NET-Routing das gesamte Umschreiben und ignoriert das URL Rewrite-Modul. Überprüfen Sie diesen Moment irgendwie (sorry, ich bin nicht gut in ASP.NET).
LazyOne
Nochmals vielen Dank für Ihre Antwort. Ich habe alles überprüft, was Sie oben erwähnt haben, und es wurden keine weiteren Regeln hinzugefügt. Ich habe versucht, dies über Standardwebsite> URL Rewrite hinzuzufügen, aber es hat auch nicht funktioniert. Ich habe auch keine ASP.NET-Umleitung eingerichtet.
user881148
1
@mythofechelon Ja, das URL Rewrite-Modul ist auch mit IIS 10 (Windows 10 / Windows Server 2016) noch nicht gebündelt und muss separat installiert werden.
LazyOne
1
Ich würde vorschlagen, <match url = "^ \ /? $" /> Zu verwenden, um sicherzustellen, dass es funktioniert, wenn / vom Benutzer am Ende der URL angegeben wird.
Marijus Ravickas
47

Ich denke, dies könnte ohne das IIS URL Rewrite-Modul erfolgen. <httpRedirect>unterstützt Platzhalter, sodass Sie diese folgendermaßen konfigurieren können:

  <system.webServer>
    <httpRedirect enabled="true">
      <add wildcard="/" destination="/menu_1/MainScreen.aspx" />
    </httpRedirect>
  </system.webServer>

Beachten Sie, dass die Funktion "HTTP-Umleitung" in IIS aktiviert sein muss - siehe HTTP-Umleitungen

Shad
quelle
Das funktioniert perfekt.
Nick
16

Ich konnte dies mit der akzeptierten Antwort nicht zum Laufen bringen, hauptsächlich weil ich nicht wusste, wo ich diesen Code eingeben sollte. Ich habe überall nach einer Erklärung für das URL-Rewrite-Tool gesucht, die Sinn machte, aber keine finden konnte. Am Ende habe ich das HTTP-Umleitungstool in IIS verwendet.

  1. Wählen Sie Ihre Site
  2. Klicken Sie im Abschnitt IIS auf HTTP-Umleitung (Stellen Sie sicher, dass der Rollendienst installiert ist).
  3. Aktivieren Sie "Anforderungen an dieses Ziel umleiten".
  4. Geben Sie ein, wohin Sie umleiten möchten. In Ihrem Fall "wwww.mysite.com/menu_1/MainScreen.aspx"
  5. Im Umleitungsverhalten musste ich aktivieren: "Nur Anforderungen an Inhalte in diesem Verzeichnis umleiten (keine Unterverzeichnisse), sonst würde es in eine Schleife geraten. Sehen Sie, was für Sie funktioniert.

Hoffe das hilft.

Jarrod
quelle
1
Bei dieser Lösung liegt ein Problem vor. Wenn auf Umleiten / Umschreiben http://server/auf gesetzt http://server/Folder/, wird der Zugriff http://server/Folder(beachten Sie keinen abschließenden Schrägstrich) umgeleitet http://server/Folder/Folder, was wahrscheinlich einen 404
zurückgibt.
Es ist eine Weile her, seit ich daran gearbeitet habe, aber ich scheine mich zu erinnern, dass mir das passiert ist und der Grund für meinen fünften Schritt. Hast du das überprüft?
Jarrod
1
Ich kann mich ehrlich gesagt nicht erinnern, aber ich glaube es. Beachten Sie, dass in meinem obigen Fall IIS / Folder als Datei anstelle eines Verzeichnisses sieht, sodass es in das Unterverzeichnis umleitet und nicht vom Ausschluss "(nicht Unterverzeichnisse)" abgedeckt wird.
arid1
4

Sie müssen dies von Microsoft herunterladen: http://www.microsoft.com/en-us/download/details.aspx?id=7435 .

Das Tool heißt "Microsoft URL Rewrite Module 2.0 für IIS 7" und wird von Microsoft wie folgt beschrieben: "URL Rewrite Module 2.0 bietet einen regelbasierten Umschreibemechanismus zum Ändern der angeforderten URLs, bevor sie vom Webserver verarbeitet werden, und zum Ändern des Antwortinhalts bevor es an HTTP-Clients geliefert wird "

mikem
quelle