Bezdepbonusu7Программирование: статьи и ответы

Вопрос

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

Автор вопроса: SharePoint NewbieОтветов: 6

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

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

С уважением,

iis

Ответы

Ответ 1 · рейтинг 2 · EMP

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

Ответ 2 · рейтинг 9 · RuslanY

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

Ответ 3 · рейтинг 3 · Cheeso

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]

Ответ 4 · рейтинг 2 · notandy

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

Ответ 5 · рейтинг 1 · Ian Suttle

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

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

Ответ 6 · Community

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

Я делаю это очень просто для 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.

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы