2017-06-02 154 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)的應用程序池重定向。我仍然需要回收它,但只有在生產中......對此尚無定論。