【发布时间】:2010-10-07 17:19:43
【问题描述】:
我需要为传入请求重写“主机名”{HTTP_HOST}。是否可以使用 IIS 7 重写模块来做到这一点?
我想将http://abc.xyz.com/* 重写为http://xyz.com/sites/abc/*。这是针对在内部使用 {HTTP_HOST} 的 SharePoint 网站完成的。
是否有任何 Url Rewriters 可以让我更改 IIS 的 {HTTP_HOST} 变量?
亲切的问候,
【问题讨论】:
我需要为传入请求重写“主机名”{HTTP_HOST}。是否可以使用 IIS 7 重写模块来做到这一点?
我想将http://abc.xyz.com/* 重写为http://xyz.com/sites/abc/*。这是针对在内部使用 {HTTP_HOST} 的 SharePoint 网站完成的。
是否有任何 Url Rewriters 可以让我更改 IIS 的 {HTTP_HOST} 变量?
亲切的问候,
【问题讨论】:
我不熟悉 IIS 7 重写模块,但ISAPI_Rewrite 几乎可以更改您想要的任何 HTTP 标头。有一个免费版本,对我们的网站来说已经足够了,对您的网站来说可能也足够了。
【讨论】:
如果您想避免重定向(根据您对 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”和“此资源的永久重定向” 并输入您的完全限定主机名条目,如下所示
$S$Q 将维护您输入的其他主机名上的所有 URL。
随意测试一下
http://www.economist.co.uk/world/americas/
只会把你推到
http://www.economist.com/world/americas/
这意味着您不必运行,至少出于这个原因,相当昂贵的 IIS 重写模块
【讨论】:
是的,可以使用 IIS 7 重写模块。您可以使用 GUI 根据 this blog post 在 IIS7 中设置重定向。
【讨论】:
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。
【讨论】: