I got a problem with the creation of rewrite rule which is using a rewrite map in IIS. The goal is to rewrite requests like /Japan/test.html
or /Chile/test.html
to jp/en/simple-test
and cl/en/simple-test
.
Here is the rewrite rule:
<rule name="Rewrite sites" enabled="true" stopProcessing="true">
<match url="^/(.*)/test.html$" />
<conditions>
<add input="{Sites:{R:1}}" pattern="(.+)" />
</conditions>
<action type="Rewrite" url="{C:1}/en/simple-test" appendQueryString="false" />
</rule>
And this is my rewrite map:
<rewriteMap name="Sites">
<add key="chile" value="cl" />
<add key="japan" value="jp" />
</rewriteMap>
So once again, I want to dynamically translate all the languages into language codes and rewrite to language_code/en/simple-test
. I want to use rewrite map as there will be more languages.
After few hours of tests, I was finally able to solve my problem. Here is how Rewrite Rule
and Rewrite Map
should look like for above conditions:
<rule name="Rewrite sites" enabled="true" stopProcessing="true">
<match url="(.*)/test.html$" />
<conditions>
<add input="{Sites:{R:1}}" pattern="(.*)" />
</conditions>
<action type="Rewrite" url="{C:1}/en/simple-test" />
</rule>
<rewriteMap name="Sites">
<add key="chile" value="/cl" />
<add key="japan" value="/jp" />
</rewriteMap>
Tip! If you don't known what is in {R:0}, {R:1}, {C:0} or {C:1} back referenced create fake rewrite action e.g.: <action type="Rewrite" url="www.test.com?a={C:1}" />
and in the a
param you will see specyfic back reference content.