重写适用于不同域和子域的规则

时间:2017-06-02 22:34:52

标签: asp.net url-rewriting url-redirection

我想知道是否可以设置重写规则,其中您不指定域,仅指定访问的页面和要重定向到的页面。我的目标是不必为不同的站点(即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

1 个答案:

答案 0 :(得分:0)

可以使用{HTTP_HOST}{C:#}之类的引用。 IIS Rewrite模块对于设置它非常有用。这是一个截图,其中包含一些说明如何完成的说明:

enter image description here

通过使用{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)重定向来回收应用池。我仍然需要回收它,但只是在生产中......对此没有判决。