Перезапись URL с IIS 6/7 - перезапись имени хоста {HTTP_HOST} - PullRequest
7 голосов
/ 15 февраля 2009

Мне нужно переписать "Имя хоста" {HTTP_HOST} для входящего запроса. Можно ли это сделать с помощью модуля перезаписи IIS 7?
Я хочу переписать http://abc.xyz.com/* в http://xyz.com/sites/abc/*. Это делается для сайта SharePoint, который внутренне использует {HTTP_HOST}.

Существуют ли какие-либо перезаписчики URL, которые позволяют мне изменять переменную {HTTP_HOST} в IIS?

С уважением,

Ответы [ 6 ]

9 голосов
/ 09 октября 2009

Вы можете использовать IIS 7 URL Rewrite Module 2.0 для изменения серверной переменной HTTP_HOST. Дополнительная информация о том, как это сделать, доступна в Настройка заголовков HTTP-запросов и переменных сервера IIS .

3 голосов
/ 15 июля 2009

IIRF бесплатен и позволяет перезаписывать заголовки, включая HTTP_HOST.

Я хочу переписать http://abc.xyz.com/* в http://xyz.com/sites/abc/*. Это делается для сайта SharePoint, который использует {HTTP_HOST} для внутреннего использования.

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

# detect whether we're using the abc host
RewriteCond     %{HTTP_HOST}          ^abc\.xyz\.com$
RewriteHeader   Host-Needs-Rewrite:   ^$                 YaHuh

# rewrite the Host: header to the alt host name if necessary
RewriteCond     %{HTTP_HOST_NEEDS_REWRITE}   ^YaHuh$
RewriteCond     %{HTTP_HOST}                 ^(?!xyz\.com)(.+)$
RewriteHeader   Host:          .*            xyz.com 

# rewrite the Url to the appropriate place
RewriteCond     %{HTTP_HOST_NEEDS_REWRITE}   ^YaHuh$
RewriteCond     %{HTTP_HOST}                 ^xyz\.com$
RewriteRule     /(.*)$                       /sites/abc/$1     [L]

Вы также можете использовать подстановочный знак abc. Как это:

# detect whether we're using the abc host
RewriteCond     %{HTTP_HOST}          ^([^.]+)\.xyz\.com$
RewriteHeader   Host-Needs-Rewrite:   ^$                     %1

# rewrite the Host: header to the alt host name if necessary
RewriteCond     %{HTTP_HOST_NEEDS_REWRITE}   ^.+$
RewriteCond     %{HTTP_HOST}                 ^(?!xyz\.com)(.+)$
RewriteHeader   Host:          .*            xyz.com 

# rewrite the Url to the appropriate place
RewriteCond     %{HTTP_HOST_NEEDS_REWRITE}   ^(.+)$
RewriteCond     %{HTTP_HOST}                 ^xyz\.com$
RewriteRule     /(.*)$                       /sites/%1/$1     [L]
2 голосов
/ 23 февраля 2009

Да, можно использовать модуль перезаписи IIS 7. Вы можете использовать графический интерфейс для настройки перенаправления в IIS7 для этого сообщения в блоге .
Также вы можете использовать командную строку для этого ответа SO .
В обоих этих примерах у вас должна быть отдельная настройка веб-сайта с собственным домашним каталогом и привязками к доменам, которые вы хотите перенаправить. Я надеюсь, что это имеет смысл.

2 голосов
/ 15 февраля 2009

Я не знаком с модулем перезаписи IIS 7, но ISAPI_Rewrite может изменить практически любой заголовок HTTP, который вы хотите. Существует бесплатная версия, которой достаточно для нашего сайта и вполне может быть достаточно для вашей.

1 голос
/ 15 февраля 2009

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

Помимо server.transfer, типичные перенаправления довольно типичны. ISAPI_Rewrite - популярный инструмент, и он работает очень хорошо, как отметил Евгений.

0 голосов
/ 18 февраля 2009

ОБНОВЛЕНИЕ: Это сделает перенаправление, а не сбросит переменную. Я не буду удалять этот ответ, так как думаю, что он аккуратный, но он не отвечает точно, что вы хотите

Я делаю это очень просто для Economist.com

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

216.35.68.215 economist.com

и другой сайт IIS прослушивает IP-адрес с другими введенными заголовками хоста.

т.е.

216.35.68.215 economist.co.uk

Второй веб-слэйв в «Домашнем каталоге» имеет набор перенаправлений, который будет корректировать любые имена хостов, которые приходят на ваш сайт в

Установите «Точный URL, введенный выше» и «Постоянное перенаправление для этого ресурса» и введите свою полностью определенную запись имени хоста следующим образом

http://www.economist.com$S$Q

$ S $ Q будет поддерживать все URL-адреса других ваших имен хостов, которые вводятся.

Не стесняйтесь проверить это

http://www.economist.co.uk/world/americas/

просто подтолкнет вас к

http://www.economist.com/world/americas/

Это означает, что вам не нужно запускать, по крайней мере по этой причине, довольно дорогой модуль перезаписи IIS

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...