• ASP.NET MVC 部署全站HTTPS


    什么是全站HTTPS

    全站HTTPS就是指整个网站的所有页面,所有资源全部使用HTTPS链接。
    当用户的某个请求是明文的HTTP时,应该通过HTTP状态码301永久重定向到对应的HTTPS链接。

    为了实现全站HTTPS,可以从下面两种方法中选取一种。

    修改Global.asax.cs

    Global.asax.cs添加如下代码

    #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节点,并在此节点下添加:

        <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节点下添加如下内容:

      <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 转换语法

  • 相关阅读:
    shell脚本之数组
    shell脚本之函数
    shell脚本之sed
    shell脚本的for循环与read
    shell脚本之if语句
    shell脚本正则表达式
    shell的编程原理
    《梦断代码》阅读笔记03
    12.19学习总结
    《梦断代码》阅读笔记02
  • 原文地址:https://www.cnblogs.com/qin-nz/p/4591687.html
Copyright © 2020-2023  润新知