IIS URL 重写:@import section?

IIS URL 重写:@import section?

我试图将 JetBrains TeamCity(在端口 81 上使用 TomCat)置于 IIS 7 后面,以便http://www.example.com/teamcity/代理至http://我的服务器:81/。我认为我基本上已经让它工作了,除了 TeamCity 在<style>元素中输出 @import。我不知道如何定义出站规则来处理这个问题。

我该如何通过 URL 重写来解决这个问题?

或者,我可以教 TeamCity 有关备用虚拟目录的知识,以便它在所有内容上都加上前缀/teamcity吗?

或者,更确切地说,有没有更好的方法让 TeamCity 落后于 IIS 7.5?

答案1

更新:以下不能完全工作:一些 Javascript 有问题,并且注销重定向已损坏。

选项:

  1. 在正在监听的 Tomcat 安装中托管 TeamCity /teamcity;那么就不需要出站规则了。我已经在 drupal 安装中使用它了。
  2. 重定向teamcity.example.com(无虚拟目录)。示例步骤其他地方。这将需要一些 DNS CNAME 和通配符证书(如果使用 HTTPS 进行外部访问)。

我将把其他说明留在这里以供后人参考...

您可以通过设置来配置 URL Rewrite 来重写文本的任何部分filterByTags="None"

所以我现在有以下内容C:\Inetpub\wwwroot\web.config

<configuration>
  <system.webServer>
    <rewrite>
      <rules>
        <!-- Anything to http://www.example.com/teamcity/ should be
             rewritten to http://teamcity:81/ -->
        <rule name="TeamCity (/teamcity)">
          <match url="^teamcity/(.*)" />
          <serverVariables>
            <!-- URL Rewrite can't deal with Encoding: gzip; turn that off. -->
            <set name="HTTP_ACCEPT_ENCODING" value="" />
          </serverVariables>
          <action type="Rewrite"
                  url="http://teamcity:81/{R:1}" />
        </rule>
      </rules>

这是入站规则;有三条出站规则:

      <outboundRules>

登录重定向:

        <!-- 302 Redirects (for the login page, e.g.) need to be rewritten. -->
        <rule name="Teamcity (/teamcity) - Redirect" preCondition="IsRedirect">
          <match serverVariable="RESPONSE_LOCATION"
                 pattern="http://[^/]+/(.*)" />
          <action type="Rewrite"
                  value="http://www.example.com/teamcity/{R:1}" />
        </rule>

普通 HTML 重写:

        <!-- Links in HTML need to be rewritten. -->
        <rule name="TeamCity (/teamcity) - HTML" preCondition="IsHTML">
          <!-- I've ellided the other tag types here; you might want them. -->
          <match filterByTags="A, ..."
                 pattern="^(.*)" />
          <action type="Rewrite"
                  value="http://www.example.com/teamcity/{R:1}" />
        </rule>

@import CSS 文件:

        <!-- TeamCity uses @import for styles; fix that. -->
        <rule name="TeamCity (/teamcity) - Style" preCondition="IsHTML">
          <match filterByTags="None" pattern="@import &quot;/" />
          <action type="Rewrite" value="@import &quot;/teamcity/" />
        </rule>

还有一些先决条件:

        <preConditions>
          <preCondition name="IsRedirect">
            <add input="{RESPONSE_STATUS}" pattern="302" />
          </preCondition>
          <preCondition name="IsHTML">
            <add input="{RESPONSE_CONTENT_TYPE}" pattern="^text/html" />
          </preCondition>
        </preConditions>
      </outboundRules>

    </rewrite>
  </system.webServer>
</configuration>

它似乎有效,但如果我发现其他任何东西,我会回来更新这个答案。

相关内容