2

I have the following inbound and outbound rules defined to get my reverse proxy working.

<rewrite>
    <rules>
        <rule name="Route the requests for backend app" stopProcessing="true">
            <match url="^foldera/folderb/(.*)" />
            <conditions>
                <add input="{HTTP_HOST}" pattern="www.site1.com" />
            </conditions>
            <action type="Rewrite" url="http://www.site2.com/{R:1}" />
            <serverVariables>
                <set name="HTTP_ACCEPT_ENCODING" value="" />
            </serverVariables>
        </rule>
    </rules>
    <outboundRules>
        <rule name="RewriteRelativePaths" preCondition="ResponseIsHtml" enabled="true" stopProcessing="false">
            <match filterByTags="A, Area, Base, Form, Frame, Head, IFrame, Img, Input, Link, Script" pattern="^/(.*)" />
            <action type="Rewrite" value="/foldera/folderb/{R:1}" />
            <conditions>
                <add input="{URL}" pattern="^/foldera/folderb/.*" />
            </conditions>
        </rule>
        <preConditions>
            <preCondition name="ResponseIsHtml">
                <add input="{RESPONSE_CONTENT_TYPE}" pattern="^text/html" />
            </preCondition>
        </preConditions>
    </outboundRules>
</rewrite>

Now, the site "http://www.site2.com/" is correclty loaded in "http://www.site1.com/foldera/folderb/" and the outbound rule is making sure that every resource from site2 is rewritten to http://www.site1.com/foldera/folderb/{resourcefromsite1} Unfortunately, the outbound rule is also crashing the rest of my site. Probably because he's trying to rewrite every native resource to this same "http://www.site1.com/foldera/folderb/" folderstructure. How can I make the outbound rule only to respond to resources that are requested/loaded through path http://www.site1.com/foldera/folderb/ and for instance not through http://www.site1.com/foldera

Cheers Jeroen

jvb
  • 59
  • 1
  • 4

1 Answers1

1

You were very close to solution. To solve this you must add {URL} as input inside your preCondition. Your rewrite rules should look like this finally:

<rewrite>
    <rules>
        <rule name="Route the requests for backend app" stopProcessing="true">
            <match url="^foldera/folderb/(.*)" />
            <conditions>
                <add input="{HTTP_HOST}" pattern="www.site1.com" />
            </conditions>
            <action type="Rewrite" url="http://www.site2.com/{R:1}" />
            <serverVariables>
                <set name="HTTP_ACCEPT_ENCODING" value="" />
            </serverVariables>
        </rule>
    </rules>
    <outboundRules>
        <rule name="RewriteRelativePaths" preCondition="ResponseIsHtml" enabled="true" stopProcessing="false">
            <match filterByTags="A, Area, Base, Form, Frame, Head, IFrame, Img, Input, Link, Script" pattern="^/(.*)" />
            <action type="Rewrite" value="/foldera/folderb/{R:1}" />
            <!-- Removed condition from here -->
        </rule>
        <preConditions>
            <preCondition name="ResponseIsHtml">
                <add input="{RESPONSE_CONTENT_TYPE}" pattern="^text/html" />
                <add input="{URL}" pattern="^/foldera/folderb/.*" /> <!-- Added your condition here -->
            </preCondition>
        </preConditions>
    </outboundRules>
</rewrite>

This way Outbound Rule will be applied only when Response is HTML and current URL got specified pattern.

msmolcic
  • 6,407
  • 8
  • 32
  • 56