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

Можно ли манипулировать входящим запросом на уровне IIS еще до того, как он будет назначен сайту на сервере?

По сути, я хочу переписать это...

www.somegenericdomain.com?site=someotherdomain

К этому --

www.someotherdomain.com

И мне нужно сделать это до того, как IIS выберет, к какому сайту относится запрос, поэтому мне нужно изменить заголовок хоста до этого момента.

Возможно или сумасшествие? Мы запускаем IIS7.


person Deane    schedule 23.03.2010    source источник
comment
Попробуйте задать этот вопрос на SO serverfault.com.   -  person Kev    schedule 24.03.2010


Ответы (2)


Вы можете переписать, перенаправить или прокси-запросы.

  • Rewrite изменяет запрос, но не изменяет сайт, которому он назначен. С помощью перезаписи вы можете:

    • return an HTTP error code (503, 404, 401, etc);
    • управлять строкой запроса или URL-адресом. одним из примеров является преобразование параметра строки запроса в элемент пути URL. www.server.com/default.aspx?s=foo становится www.server.com/foo или наоборот.
    • установить заголовки в запросе.
  • Перенаправление отправляет браузеру ответ 301 или 302 с обновленным адресом. Вы можете получить запрос на www.example.com/foo и ответить браузеру ошибкой 302 и обновленным адресом www.otherdomain.com и т. д.

  • Проксируйте запрос. В этом случае говорят, что веб-сервер действует как «прозрачный прокси». Это означает, что первоначальный сервер IIS может вызвать второй сервер, получить ответ, а затем упаковать его обратно исходному запрашивающему.

Эти три действия часто выполняются в комбинации. Инструменты, используемые для выполнения этих действий, называются «переписчиками URL». В IIS7 есть встроенная опция от Microsoft (Модуль перезаписи URL-адресов IIS), и есть также сторонние варианты, некоторые бесплатные и некоторые коммерческие, для IIS6, IIS7 и других веб-серверов, отличных от Windows. mod_proxy от Apache — самый большой для Linux. Все эти инструменты делают в основном одни и те же вещи.


Отвечая на ваш конкретный вопрос, НЕТ, вы не можете переписать запрос с одного домена на другой. Для веб-серверов переписать — это многозначительный термин, а Перезапись URL исключает возможность смены сервера.

Однако возможно преобразовать запрос с одного сервера на другой либо через перенаправление, либо через прокси. Одним из них может быть то, что вы хотите, когда вы спрашиваете о «переписывании» запроса.

person Cheeso    schedule 23.03.2010
comment
Я определенно хочу переписать, а не перенаправить (URL-адрес браузера должен оставаться прежним). Я нашел модуль перезаписи URL-адресов и поигрался с ним, но не похоже, что он позволит мне переписать заголовок хоста, а это, по сути, то, что мне нужно сделать. Ваша идея с прокси интересна... - person Deane; 23.03.2010
comment
Я не знаю, использует ли модуль перезаписи URL-адресов IIS прокси. IIRF делает. Это бесплатно. iirf.codeplex.com. - person Cheeso; 23.03.2010

Я предполагаю, что все это возможно, но не для запуска перед IIS. Одна часть сервера даже работает как низкоуровневый драйвер. Но вы можете использовать решения для перезаписи URL-адресов, такие как модуль mod_rewrite для Helicon Ape http://www.helicontech.com/ape/doc/mod_rewrite.htm. Настроив софт глобально на все сайты, вы можете получить то, что вам нужно, следующим образом:

RewriteEngine on
RewriteCond %{HTTP_HOST} www.somegenericdomain.com [NC]
RewriteProxy (.*) http://www.someotherdomain.com$1
person Slava    schedule 24.03.2010