Przekierowanie adresu URL usług IIS7 z katalogu głównego do podkatalogu [zamknięte]

83

Używam systemu Windows Server 2008 z usługami IIS7. Muszę przekierować użytkowników, którzy przychodzą www.mysite.comdo wwww.mysite.com/menu_1/MainScreen.aspx. Oto struktura plików, które mam dla projektów:

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

Naprawdę docenię każdą pomoc w tej sprawie.

user881148
źródło
Istnieje cienka granica między programowaniem a administracją serwerami (granica ta jest coraz bardziej zatarta dzięki popularności „Dev Ops”). Mimo to przepełnienie stosu i błąd serwera utrzymują wyraźne rozróżnienie między tymi dwiema witrynami, a ta zawartość należy do Server Fault, ponieważ tak naprawdę chodzi bardziej o konfigurowanie narzędzia (IIS) niż programowanie.
machineghost

Odpowiedzi:

131

Tutaj jest. Dodaj ten kod do swojego pliku web.config :

<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>

Zrobi to stałe przekierowanie 301 (adres URL zostanie zmieniony w przeglądarce). Jeśli chcesz, aby takie „przekierowanie” było niewidoczne (przepisanie, przekierowanie wewnętrzne), użyj tej reguły (jedyna różnica polega na tym, że „Przekierowanie” zostało zastąpione przez „Przepisz”):

<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
źródło
2
Dziękuję za odpowiedź. To nadal nie działa dla mnie. Najpierw dodałem to do wwwroot web.config i tam nie działałem. Więc otworzyłem przepisywanie adresu URL na poziomie serwera (serwer> witryny> domyślna witryna internetowa), ale nadal nie działa. Czy ja tu robię coś złego? Jeszcze raz bardzo dziękuję za pomoc.
user881148
2
@ user881148 Reguła zdecydowanie działa - testowałem przed wysłaniem. 1) Może jest umieszczony w złej kolejności / miejscu? Kolejność reguł ma znaczenie: jeśli masz już jakieś reguły, dodaj tę regułę przed innymi. 2) „Serwer> Witryny> Domyślna witryna internetowa” - to nie jest poziom serwera - to domyślna normalna witryna internetowa utworzona przez instalator usług IIS - nic więcej. 3) Spróbuj utworzyć tę regułę ręcznie za pomocą GUI (Menedżera IIS) - to proste - tylko kilka pól do wypełnienia. 4) Może twój routing ASP.NET obsługuje wszystkie przepisywanie i ignoruje moduł ponownego zapisywania adresów URL. Sprawdź jakoś ten moment (przepraszam, nie jestem dobry w ASP.NET).
LazyOne
Jeszcze raz dziękuję za odpowiedź. Sprawdziłem wszystko, o czym wspomniałeś powyżej i nie ma dodanych innych reguł. Próbowałem dodać to przez Domyślną witrynę internetową> Przepisanie adresu URL i to też nie działało. Nie mam też skonfigurowanego przekierowania ASP.NET.
user881148
1
@mythofechelon Tak, moduł ponownego zapisywania adresów URL nadal nie jest dołączany, nawet z usługami IIS 10 (Windows 10 / Windows Server 2016) i musi być zainstalowany osobno.
LazyOne
1
Sugerowałbym użycie <match url = "^ \ /? $" /> Aby upewnić się, że zadziała, jeśli użytkownik wskaże / na końcu adresu URL.
Marijus Ravickas
47

Myślę, że można by to zrobić bez modułu ponownego zapisywania adresów URL usług IIS. <httpRedirect>obsługuje symbole wieloznaczne, więc możesz to skonfigurować w ten sposób:

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

Należy pamiętać, że w usługach IIS musi być włączona funkcja „Przekierowywanie HTTP” - zobacz Przekierowania HTTP

Aloza
źródło
To działa doskonale.
Nick
16

Nie mogłem uzyskać tego działającego z zaakceptowaną odpowiedzią, głównie dlatego, że nie wiedziałem, gdzie wprowadzić ten kod. Szukałem wszędzie jakiegoś wyjaśnienia narzędzia do ponownego zapisywania adresów URL, które miało sens, ale nie znalazłem żadnego. Skończyło się na korzystaniu z narzędzia przekierowania HTTP w usługach IIS.

  1. Wybierz swoją witrynę
  2. Kliknij Przekierowanie HTTP w sekcji IIS (upewnij się, że usługa roli jest zainstalowana)
  3. Zaznacz „Przekierowuj żądania do tego miejsca docelowego”
  4. Wpisz, gdzie chcesz przekierować. W Twoim przypadku „wwww.mysite.com/menu_1/MainScreen.aspx”
  5. W sekcji Zachowanie przekierowań stwierdziłem, że muszę zaznaczyć opcję „Przekierowuj tylko żądania do treści w tym katalogu (nie do podkatalogów), inaczej zapętli się. Zobacz, co działa w Twoim przypadku.

Mam nadzieję że to pomoże.

Jarrod
źródło
1
Jest problem z tym rozwiązaniem. Jeśli ustawione na przekierowanie / przepisanie http://server/do http://server/Folder/, dostęp http://server/Folder(nie http://server/Folder/Folder
zwracaj
Minęło trochę czasu, odkąd nad tym pracowałem, ale wydaje mi się, że pamiętam, co się ze mną dzieje i powód, dla którego wykonałem krok # 5. Czy to sprawdziłeś?
Jarrod
1
Szczerze mówiąc, nie pamiętam, ale tak mi się wydaje. Zauważ, że w moim przypadku powyżej IIS widzi / Folder jako plik zamiast katalogu, więc przekierowuje do podkatalogu i nie jest objęty wykluczeniem „(nie podkatalogi)”.
sucha 1
4

Musisz to pobrać z firmy Microsoft: http://www.microsoft.com/en-us/download/details.aspx?id=7435 .

Narzędzie nosi nazwę „Microsoft URL Rewrite Module 2.0 for IIS 7” i jest opisane przez firmę Microsoft w następujący sposób: „URL Rewrite Module 2.0 zapewnia oparty na regułach mechanizm przepisywania adresów URL, który umożliwia zmianę żądanych adresów URL przed ich przetworzeniem przez serwer sieci Web oraz modyfikowanie zawartości odpowiedzi zanim zostanie udostępniony klientom HTTP ”

mikem
źródło