Reputation: 3
I am getting a redirect loop when I try and implement this mobile redirect I created:
<rewrite>
<rules>
<rule name="Mobile Rewrite" patternSyntax="ECMAScript" stopProcessing="true">
<match url=".*" ignoreCase="true" negate="false" />
<conditions logicalGrouping="MatchAll" trackAllCaptures="false">
<add input="{HTTP_HOST}" pattern="website.com.au" />
<add input="{HTTP_USER_AGENT}" pattern="midp|mobile|phone" />
</conditions>
<action type="Redirect" url="http://mwebsite.com.au" appendQueryString="false" redirectType="Permanent" />
</rule>
</rules>
</rewrite>
This is the catch though, the mwebsite.com.au is assigned to the same web.config as website.com.au so they are handled by the same web.config. This is the way the .net application I am dealing with is handling the request (I cannot split them up, they have to pass through this 1 web.config)
I have tested this by replacing mwebsite.com.au with google.com.au and it works perfectly but for some reason URLREWRITE cannot process the request when it has to inject mwebsite.com.au back through the same rule.
any help would be amazing.
Upvotes: 0
Views: 694
Reputation: 11762
Your rule is basically saying: if {HTTP_HOST}
contains website.com.au
and {HTTP_USER_AGENT}
contains any of midp
, mobile
or phone
, redirect to http://mwebsite.com.au
.
As you can guess, http://mwebsite.com.au
contains website.com.au
.
To fix this, simply tell your condition that it should START with website.com.au
using the pattern ^website.com.au
.
So your rule would become:
<rewrite>
<rules>
<rule name="Mobile Rewrite" patternSyntax="ECMAScript" stopProcessing="true">
<match url=".*" ignoreCase="true" negate="false" />
<conditions logicalGrouping="MatchAll" trackAllCaptures="false">
<add input="{HTTP_HOST}" pattern="^website.com.au" />
<add input="{HTTP_USER_AGENT}" pattern="midp|mobile|phone" />
</conditions>
<action type="Redirect" url="http://mwebsite.com.au" appendQueryString="false" redirectType="Permanent" />
</rule>
</rules>
</rewrite>
Upvotes: 1