Перенаправлення URL-адреси IIS7 з кореневої на підкаталог [закрито]


83

Я використовую Windows Server 2008 з IIS7. Мені потрібно перенаправити користувачів, які звертаються www.mysite.comдо wwww.mysite.com/menu_1/MainScreen.aspx. Ось структура файлів у мене для проектів:

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

Я буду дуже вдячний за допомогу в цьому.


Існує тонка межа між програмуванням та адмініструванням серверів (лінія, яка все більше розмивається завдяки популярності "Dev Ops"). Незважаючи на це, Stack Overflow та Server Fault підтримують чітку різницю між двома сайтами, і цей вміст належить до Server Fault, оскільки насправді більше стосується налаштування інструменту (IIS), аніж програмування.
machineghost

Відповіді:


131

Ось. Додайте цей код у файл 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>

Це зробить 301 постійне перенаправлення (URL-адреса буде змінена в браузері). Якщо ви хочете, щоб таке "перенаправлення" було невидимим (перезапис, внутрішнє перенаправлення), то скористайтеся цим правилом (єдина відмінність полягає в тому, що "Перенаправлення" замінено на "Переписати"):

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

2
Дякую за відповідь. Це все ще не працює для мене. Спочатку я додав це до wwwroot web.config і там не працював. Тому я відкрив URL Rewrite на рівні сервера (Сервер> Сайти> Веб-сайт за замовчуванням), але він все ще не працює. Я тут щось роблю не так? Ще раз велике спасибі за вашу допомогу.
user881148

2
@ user881148 Правило безумовно працює - я тестував перед публікацією. 1) Може, він розміщений у неправильному порядку / місці? Порядок правил має значення: якщо у вас вже є деякі правила, додайте це правило перед іншими правилами. 2) "Сервер> Сайти> Веб-сайт за замовчуванням" - це не рівень сервера - це звичайний веб-сайт за замовчуванням, створений інсталятором IIS - не більше того. 3) Спробуйте створити це правило вручну за допомогою графічного інтерфейсу (Менеджер IIS) - це просто - лише кілька полів для заповнення. 4) Можливо, ваша маршрутизація ASP.NET обробляє все переписування та ігнорує модуль перезапису URL-адрес. Перевірте цей момент якось (вибачте, я погано працюю з ASP.NET).
LazyOne

Дякую ще раз за вашу відповідь. Я перевірив усе, що ви згадали вище, і жодних інших правил не додано. Я спробував додати це через веб-сайт за замовчуванням> Перезапис URL-адреси, і це теж не спрацювало. У мене також не налаштовано перенаправлення ASP.NET.
user881148

1
@mythofechelon Так, модуль перезапису URL-адрес все ще не входить в комплект, навіть з IIS 10 (Windows 10 / Windows Server 2016), і його слід встановлювати окремо.
LazyOne

1
Я б запропонував використовувати <match url = "^ \ /? $" />, Щоб переконатися, що він буде працювати, якщо / вказано користувачем в кінці URL-адреси.
Маріхус Равіцкас

47

Я думаю, це можна було б зробити без модуля перезапису URL-адрес IIS. <httpRedirect>підтримує символи підстановки, тому ви можете налаштувати його таким чином:

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

Зверніть увагу, що вам потрібно ввімкнути функцію "Перенаправлення HTTP" у IIS - див. HTTP-перенаправлення


Це працює чудово.
Нік

16

Я не міг отримати цю роботу з прийнятою відповіддю, головним чином тому, що не знав, куди вводити цей код. Я всюди шукав якесь пояснення інструменту перезапису URL-адрес, яке мало сенс, але не знайшло. У підсумку я використав інструмент перенаправлення HTTP у IIS.

  1. Виберіть свій сайт
  2. Клацніть HTTP Redirect у розділі IIS (Переконайтесь, що службу ролей встановлено)
  3. Поставте прапорець біля пункту "Перенаправити запити до цього пункту призначення"
  4. Введіть, куди ви хочете перенаправити. У вашому випадку "wwww.mysite.com/menu_1/MainScreen.aspx"
  5. У "Перенаправленні поведінки" я виявив, що мені потрібно було встановити прапорець "Тільки перенаправляти запити на вміст у цьому каталозі (а не в підкаталоги), інакше він потрапляв би в цикл. Подивіться, що вам підходить.

Сподіваюся, це допомагає.


1
Проблема з цим рішенням. Якщо встановити переспрямування / перезапис http://server/на http://server/Folder/, доступ http://server/Folder(зверніть увагу на відсутність косої риски) буде перенаправлено на http://server/Folder/Folder, що, швидше за все, поверне 404.
arid1

Минув деякий час з тих пір, як я працював над цим, але, здається, я пам’ятаю, що це відбувалося зі мною та причину мого кроку No5. У вас це перевірено?
Джаррод

1
Я, чесно кажучи, не пам’ятаю, але я так вірю. Зверніть увагу, що в моєму випадку вище IIS бачить / Folder як файл, а не каталог, тому він перенаправляє до підкаталогу і не охоплюється виключенням "(не підкаталоги)".
arid1

4

Вам потрібно завантажити це з корпорації Майкрософт: http://www.microsoft.com/en-us/download/details.aspx?id=7435 .

Інструмент називається "Microsoft URL Rewrite Module 2.0 для IIS 7" і описується таким чином від Microsoft: "URL Rewrite Module 2.0 забезпечує механізм переписування URL-адрес на основі правил для зміни запитуваних URL-адрес перед їх обробкою веб-сервером та для змінення вмісту відповіді до того, як він буде наданий клієнтам HTTP "

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.