2009-02-15 4 views
6

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

Есть ли какие-либо Url Rewriters, которые позволяют мне изменять переменную {HTTP_HOST} IIS?

С наилучшими пожеланиями,

ответ

2

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

+0

Я не хочу перенаправлять. Вместо этого я хочу изменить {HTTP_HOST} для текущего запроса. –

+0

ISAPI_Rewrite может сделать именно это - он может изменить HTTP-заголовок Host: HTTP для текущего запроса, так же как когда он «перезаписывает» URL-адрес, он не отправляет перенаправление клиенту. – EMP

1

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

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

0

UPDATE: Это сделает перенаправление, а не сбросит переменную. Я не буду удалять этот ответ, как я думаю, что это в чистом виде, но он не отвечает именно то, что вы хотите

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

3

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

+0

Жаль, что страница не найдена ... – Abel

+0

Похоже, что она переехала на http://www.trainsignal.com/blog/iis7-url-rewrite-extension-on-windows-server-2008 – notandy

3

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] 

Вы могли бы символы подстановку Азбуки части тоже. Например:

# 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] 
9

Вы можете использовать модуль URL-адреса URL-адреса IIS 7 2.0 для изменения серверной переменной HTTP_HOST. Более подробную информацию о том, как это сделать, можно получить в Setting HTTP request headers and IIS server variables.

Смежные вопросы