Назад | Перейти на главную страницу

Как мне настроить IIS 7 (скидка asp.net) на указание субдоменов в подкаталогах приложений?

У меня есть дисконтная учетная запись asp.net, в которой используется IIS 7, и я хочу настроить поддомены, чтобы они указывали на определенные приложения на сайте.

Например:

«s1.site.com» запустит приложение на «site.com/serverone». Я хотел бы, чтобы субдомен был непрозрачным, чтобы пользователям не приходилось иметь дело с частью / serverone.

Был подобный вопрос о сбое сервера, но он включает в себя создание совершенно нового сайта для каждого поддомена, где я бы предпочел просто перенаправить к независимым приложениям в подкаталогах для каждого поддомена.

Также скидка asp.net предоставляет программное решение на основе сценариев, но это, очевидно, менее желательное и гибкое решение и, вероятно, приводит к снижению производительности (хотя я фактически не измерил разницу между двумя методами).

Я не уверен, как работает панель управления скидкой aps.net, но если вы делали это непосредственно в IIS, вам нужно создать отдельный сайт для каждого приложения, не обязательно для каждого поддомена, если на приложение больше одного поддомена, затем настройте его с привязками для каждого URL-адреса поддоменов. Тогда корнем каждого сайта будет папка с вашими приложениями. Вы не можете просто использовать подпапку основного сайта, так как вы не можете добавлять привязки к папке.

В качестве альтернативы вы можете использовать Перезапись URL Переписать запрос на site.com/serverone на s1.site.com

Используя Перезапись URL, о котором упоминал Сэм Коген, который автоматически устанавливается в любой дисконтной учетной записи asp.net (и который может быть установлен на любой сервер IIS7), я создал правило перезаписи, чтобы решить свою проблему.

Заметка: Сотрудники Discount asp.net сказали, что правило перезаписи - единственный способ добиться этого в одной из их учетных записей, помимо программного сценария. Discount asp.net предоставляет программный (я говорю «взломать») скрипт, который направляет поддомены в подкаталоги, но мне требовалось больше гибкости и производительности, чем могло бы обеспечить такое решение.

Если модуль перезаписи IIS 7 не установлен, вам нужно будет найти модуль (возможно, на веб-сайте Microsoft IIS), а затем установить его.

После установки модуля перезаписи в IIS подключитесь к нему с помощью диспетчера IIS.

Убедитесь, что у вас есть корневой уровень веб-сайта, выбранного при создании правила (а не подкаталога, в котором находится ваше приложение), это очень важно, потому что это привело меня к критической ошибке, которая потратила некоторое время впустую. Правила перезаписи могут применяться на разных уровнях иерархии каталогов, в результате чего правило имеет разные эффекты в зависимости от того, где в иерархии каталогов находится правило (я считаю, что это вносит изменения в локальный файл web.config, когда правило создан, но я не нашел времени, чтобы это подтвердить). Это также означает, что вы не можете видеть правила, установленные в других каталогах, когда вы изменяете правила в другом каталоге.

Выбор корневого каталога для перезаписи важен, потому что вы хотите перенаправить все URL-адреса поддоменов на URL-адрес подкаталога (кроме тех, которые уже перенаправлены в подкаталог).

Выбрав корневой каталог сайта, дважды щелкните Перезапись URL, чтобы войти в область перезаписи. Затем нажмите Добавить правило (я) и создайте пустое правило.

Для соответствия

Шаблон использование: ^(?!serverone/)(.*) и установить

Запрошенный URL: к 'Соответствует шаблону', и

С помощью к Регулярные выражения.

Это направит любой URL-адрес через это правило, игнорируя те, которые уже направляются в правильный субдомен, но мы хотим ограничить перезапись от материалов маршрутизации, у которых нет субдомена в URL-адресе, поэтому теперь мы добавим условие.

Требуется только одно условие, используя {HTTP_HOST} для ввод, и шаблон для него: s1.site.com

Наконец, для действия вам понадобится 'Тип действия"из"Переписать', который добавляет значение строки запроса.

URL перезаписи должен быть: serverone/{R:0}.