如何强制网站的某些部分在 SSL 下浏览?

How to force certain sections of the website to be browsed under SSL?

我们网站的某些部分或页面涉及敏感的用户或帐户信息。我想强制用户在 HTTPS 下浏览这些页面。而具有 public 内容的其他页面应该在 HTTP 下可用。我打算在 IIS 上安装 url Rewrite 模块并编写规则来实现这一点。我不确定如何在 web.config 中编写重定向规则。

服务器:IIS 7.5

SSL 下的页面示例:

  1. mywebsite.com.au/login

  2. mywebsite.com.au/login/

  3. mywebsite.com.au/member
  4. mywebsite.com.au/member/仪表板
  5. mywebsite.com.au/member/账户
  6. mywebsite.com.au/member/.......

所有不属于上面指定的 URL 模式的页面只能在 http 下浏览。

Umbraco 已经有 UrlRewriging.net 个组件。检查您的 config 文件夹,您会发现 urlrewriting.config 这是实现您所追求目标的一种潜在方式。以下是规则 可能 的示例(未经测试):

<add name="ForceSSLLogin"
  virtualUrl="^http://(.*)/login(.*)"
  rewriteUrlParameter="ExcludeFromClientQueryString"
  destinationUrl="https:///login"
  redirect="Domain"
  ignoreCase="true" />

<add name="ForceSSLMembers"
  virtualUrl="^http://(.*)/member(.*)"
  rewriteUrlParameter="ExcludeFromClientQueryString"
  destinationUrl="https:///member"
  redirect="Domain"
  ignoreCase="true" />    

我不太喜欢这个解决方案,因为如果有人更改了会员区页面的名称,url 重写将不再有效。

你没有说你使用的是什么版本的 Umbraco,但实际上可能更好的是尝试这样的包:

HTTPS 重定向

HTTPS 重定向提供了一种简单的机制,可以根据文档类型(别名)、节点 ID 或模板别名将 URL 从 HTTP 切换到 HTTPS (SSL)。

https://our.umbraco.org/projects/website-utilities/https-redirect

这是我为实现 http->https 和 https->http 重定向而实施的重写规则。请注意,在 http->https 重定向时,您还必须将对 css、js 和图像文件的请求从 http 重定向到 https,否则浏览器可能会拒绝执行这些文件。

You can also check the discussion on IIS forum.

<rewrite>
    <rules>
        <rule name="HTTPS to HTTP redirect" stopProcessing="true">
            <match url="(.*)" />
            <conditions>
                <add input="{HTTPS}" pattern="ON" />
                <add input="{URL}" pattern="^/login" negate="true" />
                <add input="{URL}" pattern="^/member" negate="true" />
                <add input="{URL}" pattern="^/(.*)(.js|.css|.png|.jpg|.woff)" negate="true" />
            </conditions>
            <action type="Redirect" redirectType="Permanent" url="http://{HTTP_HOST}/{R:1}" />
        </rule>
        <rule name="HTTP to HTTPS redirect login" stopProcessing="true">
            <match url="^login" />
            <conditions>
              <add input="{HTTPS}" pattern="OFF" />
            </conditions>
            <action type="Redirect" redirectType="Permanent" url="https://{HTTP_HOST}/login/" />
        </rule>
        <rule name="HTTP to HTTPS redirect member" stopProcessing="true">
            <match url="^member/(.*)" />
            <conditions>
              <add input="{HTTPS}" pattern="OFF" />
            </conditions>
            <action type="Redirect" redirectType="Permanent" url="https://{HTTP_HOST}/member/{R:1}" />
        </rule>
        <rule name="HTTP to HTTPS redirect resources" stopProcessing="true">
            <match url="http://(.*)(.css|.js|.png|.jpg|.woff)" />
            <conditions>
              <add input="{HTTPS}" pattern="ON" />
            </conditions>
            <action type="Redirect" redirectType="Permanent" url="https://{HTTP_HOST}/{R:1}{R:2}" />
        </rule>         
    </rules>
</rewrite>