Перезапись 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 7, но ISAPI_Rewrite может изменить практически любой HTTP-заголовок, который вы хотите. . Есть бесплатная версия, которой достаточно для нашего сайта и вполне может хватить и для вашего.
Ответ 2 · рейтинг 9 · RuslanY
Вы можете использовать модуль перезаписи URL-адресов IIS 7 версии 2.0, чтобы изменить переменную сервера HTTP_HOST. Дополнительная информация о том, как это сделать, доступна в Настройка заголовков HTTP-запросов и переменных сервера IIS.
Ответ 3 · рейтинг 3 · Cheeso
IIRF бесплатен и позволяет переписывать заголовки, включая 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.