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

时间:2015-03-13 00:57:19

标签: asp.net iis url-rewriting iis-7.5

在我们的网站上,某些部分或页面处理敏感的用户或帐户信息。我想强制用户在HTTPS下浏览这些页面。而其他具有公共内容的页面应该在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/dashboard
  5. mywebsite.com.au/member/account
  6. mywebsite.com.au/member /..........
  7. 不属于上面指定的网址格式的所有网页都应仅在http下浏览。

2 个答案:

答案 0 :(得分:1)

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

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

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

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

你不知道你在使用什么版本的Umbraco,但实际上更好的是尝试这样的套餐:

HTTPS重定向

HTTPS Redirect提供了一种基于文档类型(别名),节点ID或模板别名将URL从HTTP切换到HTTPS(SSL)的简单机制。

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

答案 1 :(得分:0)

以下是为实现http-&gt; https和https-&gt; http重定向而实施的重写规则。请注意,在http-&gt; 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>