我在同一台服务器上托管了一个站点和测试版本的站点。我希望实时版本使用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绑定。我花了几天时间在这上面,想知道是否有人知道我的代码有什么问题,或者我可以尝试其他什么。
非常感谢提前
答案 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>