Reescrita de URL do IIS: @import in section?

Reescrita de URL do IIS: @import in section?

Estou tentando colocar o JetBrains TeamCity (que usa TomCat na porta 81) atrás do IIS 7, para quehttp://www.example.com/teamcity/está procurado porhttp://meuservidor:81/. Acho que quase tudo funcionou, exceto que o TeamCity gera @import no <style>elemento. Não consigo descobrir como definir uma regra de saída para lidar com isso.

Como faço para reescrever o URL para lidar com isso?

Ou, alternativamente, posso ensinar ao TeamCity sobre o diretório virtual alternativo, para que ele prefixe tudo com /teamcity?

Ou, alternativamente, existe uma maneira melhor de colocar o TeamCity atrás do IIS 7.5?

Responder1

Atualizar:O seguinte não funciona completamente: parte do Javascript é problemática e o redirecionamento de logout está quebrado.

Opções:

  1. Hospede o TeamCity em uma instalação do Tomcat que esteja escutando /teamcity; então não haverá necessidade de regras de saída. Eu tenho isso funcionando para uma instalação drupal.
  2. Em vez disso, redirecione teamcity.example.com(sem diretório virtual). Hápassos de exemplo para issoem outro lugar. Isso exigirá alguns CNAMEs DNS e um certificado curinga (se estiver usando HTTPS para acesso externo).

Vou deixar aqui as demais instruções para a posteridade...

Você pode configurar o URL Rewrite para reescrever qualquer parte do texto, configurando filterByTags="None".

Então agora tenho o seguinte em 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>

Essa é a regra de entrada; existem três regras de saída:

      <outboundRules>

Redirecionamentos de login:

        <!-- 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>

Reescrita normal de 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>

@importação de arquivos 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>

E algumas pré-condições:

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

Parece funcionar, mas voltarei e atualizarei esta resposta se encontrar mais alguma coisa.

informação relacionada