1

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

提前谢谢了

4

1 回答 1

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>
于 2013-10-22T10:44:04.427 回答