我想知道是否可以设置重写规则,其中您不指定域,仅指定访问的页面和要重定向到的页面。我的目标是不必为不同的站点(即dev.mysite.com,qa.mysite.com等)使用相同规则的不同版本,因此一个规则适用于多个子域。例如,我需要将某人转到dev.mysite.com/mexico
重定向到mx.dev.mysite.com/es/mexico
,但这也必须适用于质量检查。此外,生产领域略有不同,这将使这更加困难。这就是我提出的 - 它肯定需要工作:
<rule name="Test Mexico Redirect">
<match url="^mexico"/>
<action type="Redirect" url="http://mx.{R:2}/es/mexico" redirectType="Permanent"/>
</rule>
不幸的是它不起作用;我得到一个空白页面。可能是因为{R:2}正在寻找规则中的域而没有指定域。我想不出办法做到这一点,因为即使是所有环境中的域都不一样。
如果你可以在<action>
元素中使用正则表达式会很酷,那么我会做这样的事情:^(mx\.).*com/es/mexico
。
答案 0 :(得分:0)
可以使用{HTTP_HOST}
和{C:#}
之类的引用。 IIS Rewrite模块对于设置它非常有用。这是一个截图,其中包含一些说明如何完成的说明:
通过使用{HTTP_HOST}
和条件,我能够制作适用于所有环境的重写规则。实际的XML结果:
<rule name="Mexico Redirect" stopProcessing="true">
<match url="mexico" />
<conditions>
<add input="{HTTP_HOST}" pattern="^((?!mx))" />
<add input="{CACHE_URL}" pattern="^(.+)://" />
</conditions>
<action type="Redirect" url="{C:1}://mx.{HTTP_HOST}/es/search" redirectType="Temporary" />
</rule>
此外,我可能错误地说您不需要使用临时(307)重定向来回收应用池。我仍然需要回收它,但只是在生产中......对此没有判决。