Я использую перезапись URL-адреса в IIS, чтобы действовать как обратный прокси.
Одна из служб http, стоящая за прокси-сервером, - это портал . HTML-код, возвращаемый порталом, представляет собой количество ресурсов, на которые ссылаются с использованием относительного пути, например /images/logo.png
, поскольку доступ к порталу осуществляется извне как mydomain. com / portalX мне нужно создать исходящее правило, которое переписывает любые относительные ссылки внутри html, чтобы добавить суффикс portalX, так что путь:
/images/logo.png
станет
/portalX/images/logo.png
Проблема в том, что мне нужно установить предварительное условие, которое ограничивает исходящее правило до конкретный сайт. Если я этого не сделаю, функция url rewrite перезаписывает все относительные пути для всех защищенных сайтов.
Как мне это сделать? Есть ли другой способ сделать это?
Вот правило, которое мне нужно, чтобы ограничить использование PortalX:
<rule name="PortalX - Relative paths" preCondition="ResponseIsHtml1" enabled="true">
<match filterByTags="A, Area, Base, Form, Frame, Head, IFrame, Img, Input, Link, Script" pattern="^/(.*)" />
<conditions logicalGrouping="MatchAll" trackAllCaptures="true">
</conditions>
<action type="Rewrite" value="/PortalX/{R:1}" />
</rule>
<preConditions>
<preCondition name="ResponseIsHtml1">
<add input="{RESPONSE_CONTENT_TYPE}" pattern="^text/html" />
</preCondition>
</preConditions>
Нашел способ здесь , добавив к правилу следующее условие:
<add input="{URL}" pattern="^/(portalX)/.*" />
Примечание: portalX - это имя домена за прокси.
Здесь полное определение правила:
<rule name="PortalX - Relative paths" preCondition="ResponseIsHtml1" enabled="true">
<match filterByTags="A, Area, Base, Form, Frame, Head, IFrame, Img, Input, Link, Script" pattern="^/(.*)" />
<conditions logicalGrouping="MatchAll" trackAllCaptures="true">
<add input="{URL}" pattern="^/(portalX)/.*" />
</conditions>
<action type="Rewrite" value="/PortalX/{R:1}" />
</rule>