2017-07-19 65 views
0

我期待在我的web.config文件中設置重寫規則,強制URL使用'www'子域。這是像這樣做:URL重寫規則在.NET中強制www,但忽略http(s)

<rules> 
    <rule name="Add WWW" stopProcessing="true"> 
    <match url="^(.*)$" /> 
    <conditions> 
     <add input="{HTTP_HOST}" pattern="^(?!www\.)(.*)$" /> 
    </conditions> 
    <action type="Redirect" url="http://www.{C:0}{PATH_INFO}" redirectType="Permanent" /> 
</rule> 

然而,在項目運行在多個領域,其中一些使用SSL和一些不多個網站。

上面的代碼硬編碼爲http://進入重定向。我所要做的就是抽象出這樣的內容,即http或https協議在重定向期間保持不變,而不用硬編碼。

所期望的結果的一些實例是:

非常感謝。

回答

0

我發現了一個reference,它解釋了這樣做的一種方法。它使用重寫鍵/值對作爲動作url中的「變量」,因爲(據我所知),目前沒有辦法將協議作爲規則中的本地變量來獲取。

該規則已被修改如下,這應該要做的事需要什麼:

<rewrite> 
    <rules> 
      <rule name="Add www maintain https" stopProcessing="true"> 
      <match url="^(.*)$" /> 
      <conditions> 
      <add input="{HTTP_HOST}" pattern="^(?!www\.)(.*)$" /> 
      </conditions> 
      <action type="Redirect" url="{MapSSL:{HTTPS}}www.{C:0}{PATH_INFO}" redirectType="Permanent" /> 
     </rule> 
    </rules> 
    <rewriteMaps> 
     <rewriteMap name="MapSSL" defaultValue="http://"> 
      <add key="ON" value="https://" /> 
      <add key="OFF" value="http://" /> 
     </rewriteMap> 
    </rewriteMaps> 
</rewrite> 

還有另一個reference其中包括本之間的替代方法來達到同樣的事情。