1

是否可以在 IIS 级别操作入站请求,甚至在它被分配到服务器上的站点之前?

本质上,我想重写这个——

www.somegenericdomain.com?site=someotherdomain

对此——

www.someotherdomain.com

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

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

4

2 回答 2

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 的内置选项(IIS URL 重写模块),还有第三方选项,一些是免费的,一些是商业的,用于 IIS6、IIS7 和其他非 Windows Web 服务器。Apache 的 mod_proxy 对 Linux 来说是最重要的。所有这些工具基本上都做同样的事情。


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

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

于 2010-03-23T19:32:56.607 回答
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
于 2010-03-24T10:40:35.780 回答