Перезапись URL-адреса IIS: @import в section?

Перезапись URL-адреса IIS: @import в section?

Я пытаюсь разместить JetBrains TeamCity (который использует TomCat на порту 81) за IIS 7, так чтоhttp://www.example.com/teamcity/прокси-сервер дляhttp://мойсервер:81/. Я думаю, что у меня это в основном работает, за исключением того, что TeamCity выводит @import в <style>элементе. Я не могу понять, как определить исходящее правило, чтобы справиться с этим.

Как мне заставить URL-адреса переписываться, чтобы справиться с этой проблемой?

Или, в качестве альтернативы, я могу объяснить TeamCity об альтернативном виртуальном каталоге, чтобы он добавлял ко всему префикс /teamcity?

Или, в качестве альтернативы, есть ли лучший способ разместить TeamCity за IIS 7.5?

решение1

Обновлять:Следующее работает не полностью: часть Javascript проблемная, а перенаправление при выходе из системы не работает.

Параметры:

  1. Разместите TeamCity в установке Tomcat, которая слушает /teamcity; тогда не будет необходимости в исходящих правилах. У меня это работает для установки Drupal.
  2. Вместо этого перенаправить teamcity.example.com(виртуального каталога нет). Естьпример шагов для этогов другом месте. Для этого потребуются некоторые DNS CNAME и wildcard-сертификат (если используется 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>

@импорт 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>

Кажется, это работает, но я вернусь и обновлю этот ответ, если найду что-то еще.

Связанный контент