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}变量?
亲切的问候,
如果你想避免重定向(根据你对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。
我不想做重定向。相反,我想更改当前请求的{HTTP_HOST}。 – 2009-02-15 08:48:55
ISAPI_Rewrite可以做到这一点 - 它可以为当前请求更改“主机:”HTTP标头,就像它“重写”一个URL时不会发送重定向到客户端一样。 – EMP 2009-02-15 09:58:04