Перенаправление 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

Я буду очень признателен за любую помощь в этом.

user881148
источник
Между программированием и администрированием сервера есть тонкая грань (эта грань становится все более размытой благодаря популярности 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>
LazyOne
источник
2
Спасибо за ответ. У меня все еще не работает. Сначала я добавил это в wwwroot web.config и там не работал. Итак, я открыл перезапись URL-адреса на уровне сервера (Сервер> Сайты> Веб-сайт по умолчанию), но он все еще не работает. Я что-то здесь делаю не так? Еще раз большое спасибо за вашу помощь.
user881148
2
@ user881148 Правило однозначно работает - тестировал перед публикацией. 1) Может быть, он поставлен не в том порядке / месте? Порядок правил имеет значение: если у вас уже есть некоторые правила, добавьте это правило перед другими правилами. 2) «Сервер> Сайты> Веб-сайт по умолчанию» - это не уровень сервера - это обычный веб-сайт по умолчанию, созданный установщиком IIS - не более того. 3) Попробуйте создать это правило вручную через графический интерфейс (диспетчер IIS) - это просто - нужно заполнить всего несколько полей. 4) Возможно, ваша маршрутизация ASP.NET обрабатывает все перезаписи и игнорирует модуль перезаписи URL. Как-нибудь проверить этот момент (извините, я не разбираюсь в ASP.NET).
LazyOne
Еще раз спасибо за ответ. Я проверил все, что вы упомянули выше, и никаких других правил не добавлено. Я попытался добавить это через Default Website> URL Rewrite, и это тоже не сработало. У меня также нет настройки перенаправления ASP.NET.
user881148
1
@mythofechelon. Да, модуль перезаписи URL-адресов по-прежнему не входит в комплект, даже с IIS 10 (Windows 10 / Windows Server 2016), и его нужно устанавливать отдельно.
LazyOne
1
Я бы предложил использовать <match url = "^ \ /? $" />, Чтобы убедиться, что он будет работать, если / указано пользователем в конце URL-адреса.
Мариюс Равицкас
47

Я думаю, это можно было бы сделать без модуля IIS URL Rewrite. <httpRedirect>поддерживает подстановочные знаки, поэтому вы можете настроить его следующим образом:

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

Обратите внимание, что в IIS должна быть включена функция «Перенаправление HTTP» - см. « Перенаправления HTTP».

Шад
источник
Это прекрасно работает.
Ник
16

Я не мог заставить это работать с принятым ответом, главным образом потому, что я не знал, где ввести этот код. Я везде искал какое-нибудь объяснение инструмента перезаписи URL, которое имело смысл, но не нашел. В итоге я использовал инструмент HTTP Redirect в 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
Прошло некоторое время с тех пор, как я работал над этим, но, кажется, я помню, что со мной происходило, и причину моего шага №5. Вы это проверили?
Джаррод
1
Честно говоря, не могу вспомнить, но я так считаю. Обратите внимание, что в моем случае выше IIS видит / Folder как файл, а не каталог, поэтому он перенаправляется в подкаталог и не попадает в исключение «(не подкаталоги)».
arid1 06
4

Вам необходимо загрузить это с сайта Microsoft: 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-адресов до их обработки веб-сервером и для изменения содержимого ответа. прежде, чем он будет доставлен HTTP-клиентам "

микем
источник