【问题标题】:Url Rewriting with IIS 6/7 - Rewriting Host Name {HTTP_HOST}使用 IIS 6/7 重写 URL - 重写主机名 {HTTP_HOST}
【发布时间】: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} 变量?

亲切的问候,

【问题讨论】:

    标签: asp.net iis


    【解决方案1】:

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

    【讨论】:

    • 我不想重定向。相反,我想更改当前请求的 {HTTP_HOST}。
    • ISAPI_Rewrite 可以做到这一点——它可以更改当前请求的“Host:”HTTP 标头,就像它“重写”一个 URL 时不会向客户端发送重定向一样。跨度>
    【解决方案2】:

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

    除了 server.transfer 实际重定向非常典型 ISAPI_Rewrite 是一种流行的工具,并且正如 Evgeny 所提到的那样工作得非常好。

    【讨论】:

      【解决方案3】:

      更新:这将执行重定向,而不是重置变量。我不会删除此答案,因为我认为它很简洁,但它并不能准确回答您想要的内容

      我为 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 重写模块

      【讨论】:

        【解决方案4】:

        是的,可以使用 IIS 7 重写模块。您可以使用 GUI 根据 this blog post 在 IIS7 中设置重定向。

        【讨论】:

        【解决方案5】:

        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]
        

        【讨论】:

          【解决方案6】:

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2013-07-01
            • 2012-12-26
            • 1970-01-01
            • 1970-01-01
            • 2011-04-07
            • 2011-10-29
            • 1970-01-01
            相关资源
            最近更新 更多