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

相关文章
相关标签/搜索