在IIS将请求分配给特定站点之前,是否可以操作请求?

时间:2010-03-23 19:13:57

标签: iis request-pipeline

是否有可能在IIS级别操作入站请求,甚至在将其分配给服务器上的站点之前?

基本上,我想重写一下 -

www.somegenericdomain.com?site=someotherdomain

对此 -

www.someotherdomain.com

我需要在IIS选择请求所属的站点之前执行此操作,因此我需要在此之前更改主机头。

可能还是疯了?我们正在运行IIS7。

2 个答案:

答案 0 :(得分:1)

您可以重写,重定向或代理请求。

  • 重写会更改请求,但不会更改分配给它的网站。通过重写,您可以:

    • 返回HTTP错误代码(503,404,401等);
    • 操纵查询字符串或URL路径。一个示例是将查询字符串参数转换为URL路径元素。 www.server.com/default.aspx?s=foo成为www.server.com/foo,反之亦然。
    • 在请求中设置标头。
  • 重定向使用更新的地址向浏览器发回301或302响应。您可以收到www.example.com/foo的请求,并使用302和www.otherdomain.com等更新地址回复浏览器。

  • 代理请求。在这种情况下,Web服务器被称为“透明代理”。这意味着初始IIS服务器可以调用第二台服务器,获取响应,然后将其打包回原始请求者。

这三种行为通常是组合完成的。用于执行这些操作的工具称为“URL重写器”。 IIS7有一个来自Microsoft(The IIS URL Rewrite Module)的内置选项,还有第三方选项,一些是免费的,一些是商业的,适用于IIS6,IIS7和其他非Windows Web服务器。 Apache的mod_proxy是Linux的重要组成部分。所有这些工具基本上都做同样的事情。


要回答您的具体问题,不,您无法重写从一个域到另一个域的请求。对于Web服务器,重写是一个有意义的术语, URL重写排除了服务器更改的可能性。

但是,可以通过重定向或代理将请求从一个服务器转换为另一个服务器。当你询问“重写”请求时,其中一个可能实际上就是你想要的。

答案 1 :(得分:0)

我想整个事情是可能的,但不是在IIS之前运行的方式。服务器的一部分甚至可以作为低级驱动程序使用。 但是您可以使用URL重写解决方案,例如Helicon Ape http://www.helicontech.com/ape/doc/mod_rewrite.htm的mod_rewrite模块。在为所有站点设置全局软件后,您可以获得所需内容,如下所示:

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