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