ASP.NET MVC 部署全站HTTPS

什麼是全站HTTPS

全站HTTPS就是指整個網站的全部頁面,全部資源所有使用HTTPS連接。
當用戶的某個請求是明文的HTTP時,應該經過HTTP狀態碼301永久重定向到對應的HTTPS連接。web

爲了實現全站HTTPS,能夠從下面兩種方法中選取一種。服務器

修改Global.asax.cs

Global.asax.cs添加以下代碼app

#if !DEBUG
            GlobalFilters.Filters.Add(new RequireHttpsAttribute());
#endif

這是配置了ASP.NET的程序,能夠處理全部的通過ASP.NET處理的請求;可是對於存放在Web服務器上的其餘資源文件(即不通過ASP.NET的程序的處理)無效。
若是有此需求,應該告知IIS服務器不要私自回覆用戶請求,要求全部請求都必須由ASP.NET程序執行。
此時,在Web.config下增長下面的內容,注意是根目錄的Web.config而不是Views文件夾的Web.config測試

<system.webServer>
    <modules runAllManagedModulesForAllRequests="true"/>
<system.webServer>

[QIN.WARNING] 全部的請求都會發送給ASP.NET處理,此時應確保程序有能力處理原來屬於IIS負責的那部份內容,好比圖片。網站

修改Web.config部署全站HTTPS

插一句題外話,下個版本的ASP.NET聽說要取消掉Web.config。
在IIS 7.0+的版本上,能夠使用URL Rename來完成。Url Rename是指當IIS接收到某個請求後,先根據設定的規則進行更改請求地址後,在發送給網站程序。經測試本方法在Azure App Service (原名 Azure Websites)是能夠使用的。
在Web.config的configuration節點下,找到或添加system.webServer節點,並在此節點下添加:ui

<rewrite>
      <rules>
        <!-- clear 會清除掉已有的rule,若是添加過別的rule,請注意確認-->
        <clear/>
        <rule name="Force HTTPS" enabled="true">
          <match url="(.*)" ignoreCase="false" />
          <conditions>
            <add input="{HTTPS}" pattern="off" />
          </conditions>
          <action type="Redirect" url="https://{HTTP_HOST}/{R:1}" appendQueryString="true" redirectType="Permanent" />
        </rule>
      </rules>
    </rewrite>

僅修改Release的Web.config

這樣就算輕鬆搞定了,可是在開發時,咱們不但願要求HTTPS,這時能夠經過只修改Release的Web.config來解決。
首先,不要修改Web.config,而是找到Web.Release.config(VS點開Web.config的小箭頭)。
configuration節點下添加以下內容:url

<system.webServer>
    <rewrite xdt:Transform="Insert">
      <rules>
        <!-- clear 會清除掉已有的rule,若是添加過別的rule,請注意確認-->
        <clear/>
        <rule name="Force HTTPS" enabled="true">
          <match url="(.*)" ignoreCase="false" />
          <conditions>
            <add input="{HTTPS}" pattern="off" />
          </conditions>
          <action type="Redirect" url="https://{HTTP_HOST}/{R:1}" appendQueryString="true" redirectType="Permanent" />
        </rule>
      </rules>
    </rewrite>
  </system.webServer>

這個如剛纔的區別僅僅在於<rewrite xdt:Transform="Insert">,關於如何整合這些內容,請參閱用於 Web 應用程序項目部署的 Web.config 轉換語法code

相關文章
相關標籤/搜索