Перезапись URL-адресов с помощью IIS 6/7 — перезапись имени хоста {HTTP_HOST}

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

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

С уважением,


person SharePoint Newbie    schedule 15.02.2009    source источник


Ответы (6)


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

person EMP    schedule 15.02.2009
comment
Я не хочу делать перенаправление. Вместо этого я хочу изменить {HTTP_HOST} для текущего запроса. - person SharePoint Newbie; 15.02.2009
comment
ISAPI_Rewrite может сделать именно это — он может изменить заголовок Host: HTTP для текущего запроса, точно так же, как когда он перезаписывает URL-адрес, он не отправляет клиенту перенаправление. - person EMP; 15.02.2009

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

person RuslanY    schedule 08.10.2009

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

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

Вам нужно переписать как 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]
person Cheeso    schedule 15.07.2009

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

person notandy    schedule 23.02.2009
comment
Похоже, он переехал на trainsignal.com/blog. / - person notandy; 10.10.2012

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

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

person Ian Suttle    schedule 15.02.2009

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

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

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

216.35.68.215 economist.com

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

i.e.

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.

person Community    schedule 18.02.2009