Url用IIS 6/7重写 - 重写主机名{HTTP_HOST}

问题描述:

我需要为传入请求重写“主机名”{HTTP_HOST}。是否有可能使用IIS 7重写模块进行此操作?
我想重写http://abc.xyz.com/ *至http://xyz.com/sites/abc/ *。这是针对内部使用{HTTP_HOST}的SharePoint网站完成的。Url用IIS 6/7重写 - 重写主机名{HTTP_HOST}

是否有任何Url Rewriters在那里让我更改IIS的{HTTP_HOST}变量?

亲切的问候,

我不熟悉的IIS 7重写模块,但ISAPI_Rewrite可以改变几乎任何你想要的HTTP标头。有一个免费版本,这对我们的网站来说已经足够了,可能已经足够用于你的网站了。

+0

我不想做重定向。相反,我想更改当前请求的{HTTP_HOST}。 – 2009-02-15 08:48:55

+0

ISAPI_Rewrite可以做到这一点 - 它可以为当前请求更改“主机:”HTTP标头,就像它“重写”一个URL时不会发送重定向到客户端一样。 – EMP 2009-02-15 09:58:04

如果你想避免重定向(根据你对Evgeny的评论),唯一的选择是server.transfer。使用server.transfer将处理发送到服务器上的不同页面,客户端不知道(在页面之间没有往返客户端的往返)。

除了server.transfer实际的重定向是非常典型的ISAPI_Rewrite是一个流行的工具,并且Evgeny提到的非常有效。

更新:这将做重定向,而不是重置变量。因为我觉得它的整洁,我不会删除这个答案,但它不回答你想

我的Economist.com

这样做是一个非常简单的方式正是您有一个站点中的两个IIS网站,他们共享相同的webroot。主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重写模块

是的,可以使用IIS 7重写模块。您可以使用GUI根据this blog post在IIS7中设置重定向。
也可以使用每个this SO answer的命令行。
在这两个例子中,你必须有一个单独的网站设置与自己的主目录,并绑定到你想要重定向的域。我希望这是有道理的。

IIRF是免费的,并允许您重写头文件,包括HTTP_HOST。

我想重写http://abc.xyz.com/ *至http://xyz.com/sites/abc/ *。这是针对内部使用{HTTP_HOST}的SharePoint网站完成的。

您需要重写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] 

你可以通配符ABC的一部分了。像这样:

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

您可以使用IIS 7 URL重写模块2.0更改HTTP_HOST服务器变量。有关如何操作的更多信息,请参阅Setting HTTP request headers and IIS server variables