2017-06-02 60 views
0

我想知道是否可以设置一个重写规则,其中不指定域,只访问所访问的页面和要重定向的页面。我的目标是不必针对不同的网站(即dev.mysite.com,qa.mysite.com等)使用相同规则的不同版本,因此一个规则适用于多个子域。例如,我需要重定向某人前往dev.mysite.com/mexicomx.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}正在寻找规则中的域名,而没有指定域名。我想不出一种方法来做到这一点,因为即使在所有环境中域名都不相同。

这将是很酷,如果你可以在<action>元素中使用正则表达式,那么我会做这样的事情:^(mx\.).*com/es/mexico

回答

0

它可能使用{HTTP_HOST}和回参考像{C:#}。 IIS重写模块对设置这一点非常有用。下面是一些笔记截图,说明它是如何做:

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