执行某个站点的ssl但不执行另一个站点的ssl

时间:2013-10-22 10:23:41

标签: asp.net vb.net ssl iis-7

我在同一台服务器上托管了一个站点和测试版本的站点。我希望实时版本使用ssl但不是测试版本。我使用以下代码强制实施SSL而不是测试:

 If HttpContext.Current.Request.IsSecureConnection.Equals(False) AndAlso HttpContext.Current.Request.IsLocal.Equals(False) AndAlso HttpContext.Current.Request.RawUrl.Contains("test.mydomain.com") = False Then

            Response.Redirect("https://" + Request.ServerVariables("HTTP_HOST") + HttpContext.Current.Request.RawUrl)
        End If

该网站的实时版本为 live.mydomain.com

我得到的结果是对 test.mydomain.com 的任何请求都转到 live.mydomain.com 。我不知道这是怎么回事。浏览器实际上在地址字段中显示 test.mydomain.com ,但显然正在使用实时版本。 test.mydomain.com 没有SSL绑定。我花了几天时间在这上面,想知道是否有人知道我的代码有什么问题,或者我可以尝试其他什么。

非常感谢提前

1 个答案:

答案 0 :(得分:3)

您可以使用IIS7 URL Rewrite module重写URL,在IIS中执行此操作(应用程序中没有任何代码)。

对于这类事情,这是一个非常有用的资源:http://ruslany.net/2009/04/10-url-rewriting-tips-and-tricks/

您想要做的是(3)和(4)的组合。

所以它说如果请求不是来自HTTPS并且主机名是live.domain.com那么重定向到HTTPS。

这样的事情:

<rule name="Redirect to HTTPS" stopProcessing="true">
  <match url="(.*)" />
  <conditions>
    <add input="{HTTPS}" pattern="^OFF$" />
    <add input="{HTTP_HOST}" negate="true" pattern="live\.mydomain\.com$" /> 
  </conditions>
  <action type="Redirect" url="https://{HTTP_HOST}/{R:1}" redirectType="Permanent" />
</rule>