【问题标题】:Switch to SSL using a relative URL使用相对 URL 切换到 SSL
【发布时间】:2009-12-04 21:15:59
【问题描述】:

我想创建一个相对链接,将当前协议从 http 切换到 https。我工作的最后一个地方在服务器上设置了一些东西,这样你就可以做到这一点,但我不记得太多了,我也不知道它是如何工作的。

这样做的理由是我不需要在需要在生产环境和开发环境之间移动的文件中硬编码服务器名称。

有没有办法让它在 IIS 6.0 中工作?


编辑:

我正在使用 .NET,但我正在创建的“链接”不会动态生成。如果你真的想要细节,我在 Umbraco 中使用了一个重定向宏,它需要传入一个 URL。

【问题讨论】:

  • 为什么需要创建相对链接,而不是在代码中动态创建绝对链接?

标签: html iis ssl relative-url


【解决方案1】:

这是 VB.NET 中的一个简单解决方案:

Imports System.Web.HttpContext

Public Shared Sub SetSSL(Optional ByVal bEnable As Boolean = False)
  If bEnable Then
    If Not Current.Request.IsSecureConnection Then
      Dim strHTTPS As String = "https://www.mysite.com"
      Current.Response.Clear()
      Current.Response.Status = "301 Moved Permanently"
      Current.Response.AddHeader("Location", strHTTPS & Current.Request.RawUrl)
      Current.Response.End()
    End If
  Else
    If Current.Request.IsSecureConnection Then
      Dim strHTTP As String = "http://www.mysite.com"
      Current.Response.Clear()
      Current.Response.Status = "301 Moved Permanently"
      Current.Response.AddHeader("Location", strHTTP & Current.Request.RawUrl)
      Current.Response.End()
    End If
  End If
End Sub

用法:

'Enable SSL
SetSSL(True)

'Disable SSL
SetSSL(False)

您可以将此添加到每个页面的 Page_Load 中。或者你可以像我一样做一些事情,在你的 global.asax 中创建一个你想要保护的文件夹或页面列表,并在 Application_BeginRequest 方法中相应地设置 SSL。这将适用于相对链接,并且页面的 HTTP 或 HTTPS 状态将始终是您在代码中告诉它的状态。

我在几个网站上都有此代码。但是作为一个例子,如果你转到https://www.techinsurance.com,你会注意到它会自动重定向到 http,因为主页不需要保护。如果您尝试访问需要保护的页面,例如http://www.techinsurance.com/quote/login.aspx,则会发生相反的情况

您可能会注意到我正在使用 301(永久)重定向。这里的附带好处是搜索引擎将根据 301 重定向代码更新其索引。

【讨论】:

    【解决方案2】:

    您使用哪种语言/框架?

    您应该能够创建自己的函数,在该函数中传入相关页面并从 HttpRequest 对象和 Server 对象(同样取决于语言或框架)推断出主机和 URL 是什么,然后只是简单地重定向到该 URL,但以 https 作为前缀。

    【讨论】:

    • 另外,如果你想得到真正的花哨,你可以为这个函数创建一个重载,如果你没有在参数中提供页面名称,那么它只是从 HttpRequest 对象中读取它。
    【解决方案3】:

    这是一个很好的CodeProject article,通过指定您要使用 SSL 的某些目录和文件来执行此操作。它会根据您的需要自动在 https 之间切换。

    我已经将它用于一个项目,并且效果非常好。

    【讨论】:

    • 这看起来很有趣,但我不确定它是否真的适用于我的情况。我要链接的目录已经有 Umbraco 后台应用程序。
    • 所有这一切都是查看该人试图点击的目录或文件,如果它被配置为安全的(在 web.config 中)它只是将它们从 http 重定向到 https。目录中的其他内容无关紧要。
    【解决方案4】:

    这与我给here的答案相同:

    是的,你可以。我推荐这个免费的开源 DLL,它可以让您指定哪些页面和文件夹需要 SSL,哪些不需要:

    http://www.codeproject.com/KB/web-security/WebPageSecurity_v2.aspx

    因此,您可以像这样在 web.config 中设置一个安全的页面:

    <secureWebPages encryptedUri="www.example.com" unencryptedUri="www.example.com" mode="RemoteOnly" >
        <files>
          <add path="/MustBeSecure.aspx" secure="Secure" />
        </files>
    </secureWebPages>
    

    【讨论】:

      【解决方案5】:

      我们最终购买了 ISAPI Rewrite,以便在 Web 服务器级别对某些 URL 执行重定向。这不是我问这个问题时要寻找的答案,但它对我们有用。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-07-08
        • 2011-10-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-04-05
        • 2015-10-07
        • 2014-12-12
        相关资源
        最近更新 更多