【问题标题】:Rewrite rule that works for different domains and subdomains重写适用于不同域和子域的规则
【发布时间】:2017-06-02 22:34:51
【问题描述】:

我想知道是否可以设置一个重写规则,您不指定域,只指定访问的页面和要重定向到的页面。我的目标是不必为不同的站点(即 dev.mysite.com、qa.mysite.com 等)使用相同规则的不同版本,因此一个规则适用于多个子域。例如,我需要将要去dev.mysite.com/mexico 的人重定向到mx.dev.mysite.com/es/mexico,但这也必须适用于 QA。此外,生产领域的领域略有不同,这会使这变得更加困难。这就是我想出的——它肯定需要工作:

<rule name="Test Mexico Redirect">
  <match url="^mexico"/>
  <action type="Redirect" url="http://mx.{R:2}/es/mexico" redirectType="Permanent"/>
</rule>

不幸的是,它不起作用;我得到一个空白页。可能是因为 {R:2} 正在规则中查找域而未指定域。我想不出办法来做到这一点,因为在所有环境中,甚至域都不相同。

如果您可以在 &lt;action&gt; 元素中使用正则表达式会很酷,然后我会做这样的事情:^(mx\.).*com/es/mexico

【问题讨论】:

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


    【解决方案1】:

    可以使用{HTTP_HOST} 和像{C:#} 这样的反向引用。 IIS 重写模块对于设置它非常有用。这是一个带有一些注释的屏幕截图,解释了它是如何完成的:

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

    【讨论】:

      猜你喜欢
      • 2021-01-29
      • 1970-01-01
      • 1970-01-01
      • 2011-10-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多