Reescritura de URL de IIS: @import en section?

Reescritura de URL de IIS: @import en section?

Estoy intentando poner JetBrains TeamCity (que usa TomCat en el puerto 81) detrás de IIS 7, para quehttp://www.example.com/teamcity/está representado porhttp://miservidor:81/. Creo que lo tengo prácticamente funcionando, excepto que TeamCity genera @import en el <style>elemento. No sé cómo definir una regla de salida para solucionar esto.

¿Cómo puedo reescribir la URL para solucionar esto?

O, alternativamente, ¿puedo enseñarle a TeamCity sobre el directorio virtual alternativo, para que anteponga todo con /teamcity?

O, más alternativamente, ¿existe una mejor manera de colocar TeamCity detrás de IIS 7.5?

Respuesta1

Actualizar:Lo siguiente no funciona del todo: parte del Javascript es problemático y la redirección de cierre de sesión no funciona.

Opciones:

  1. Aloje TeamCity en una instalación de Tomcat que esté escuchando /teamcity; entonces no habrá necesidad de reglas de salida. Tengo esto funcionando para una instalación drupal.
  2. Redirigir teamcity.example.comen su lugar (sin directorio virtual). Haypasos de ejemplo para estoen otra parte. Esto requerirá algunos CNAME de DNS y un certificado comodín (si usa HTTPS para acceso externo).

Las demás instrucciones las dejo aquí para la posteridad...

Puede configurar URL Rewrite para reescribir cualquier parte del texto configurando filterByTags="None".

Entonces ahora tengo lo siguiente en 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>

Esa es la regla entrante; Hay tres reglas de salida:

      <outboundRules>

Redirecciones de inicio de sesión:

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

Reescritura HTML normal:

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

@importación de archivos 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>

Y algunas condiciones previas:

        <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, pero volveré y actualizaré esta respuesta si encuentro algo más.

información relacionada