2010-03-23 15 views
1

是否有可能在IIS级别处理入站请求,甚至在它被分配到服务器上的站点之前?在IIS将该请求分配给特定站点之前,是否可以处理请求?

从本质上讲,我想改写这个 -

www.somegenericdomain.com?site=someotherdomain 

为了这一点 -

www.someotherdomain.com 

,我需要做这个IIS采请求属于哪个网站之前,所以我需要在此之前更改主机头。

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

+0

你应该试着问这种过度的SO http://serverfault.com – Kev 2010-03-23 22:50:01

回答

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的更新地址等回应浏览器。

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

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


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

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

+0

我肯定要改写,而不是重定向(浏览器URL需要保持不变)。我确实找到了URL重写模块,并且一直在玩它,但它看起来不会让我重写“主机”标题,这根本上是我需要做的。您的代理想法很有趣... – Deane 2010-03-23 19:44:58

+0

我不知道IIS Url重写模块是否代理。 IIRF的确如此。免费。 http://iirf.codeplex.com。 – Cheeso 2010-03-23 20:05:55

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 
相关问题