如何使用 IIS 上的 URL 重写将出站规则范围限制到特定站点

如何使用 IIS 上的 URL 重写将出站规则范围限制到特定站点

我在 IIS 上使用 url 重写作为反向代理。

代理背后的 http 服务之一是门户。门户返回的 html 是使用相对路径引用的许多资源,例如 /images/logo.png

因为门户是从外部以 mydomain.com/portalX 访问的,所以我需要创建一个出站规则,重写 html 内的任何相对引用以添加后缀 portalX,因此路径:

/images/logo.png 

会变成

/portalX/images/logo.png

问题是我需要设置一个先决条件,将出站规则限制到特定站点。如果我不这样做,url 重写会重写所有受保护站点的所有相对路径。

我该怎么做?还有其他方法吗?

以下是限制设备使用 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>

答案1

找到了办法这里,在规则中添加以下条件:

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

相关内容