我想创建一个相对链接,将当前协议从http切换到https。我工作的最后一个地方在服务器上设置了一些东西,这样你就可以做到这一点,但我不太记得它,我也不知道它是如何工作的。
这样做的理由是我不需要在需要在生产环境和开发环境之间移动的文件中硬编码服务器名称。
有没有办法在 IIS 6.0 中工作?
编辑:
我正在使用 .NET,但我正在创建的“链接”不会动态生成。如果你真的想要细节,我在 Umbraco 中使用了一个重定向宏,它需要传入一个 URL。
我想创建一个相对链接,将当前协议从http切换到https。我工作的最后一个地方在服务器上设置了一些东西,这样你就可以做到这一点,但我不太记得它,我也不知道它是如何工作的。
这样做的理由是我不需要在需要在生产环境和开发环境之间移动的文件中硬编码服务器名称。
有没有办法在 IIS 6.0 中工作?
编辑:
我正在使用 .NET,但我正在创建的“链接”不会动态生成。如果你真的想要细节,我在 Umbraco 中使用了一个重定向宏,它需要传入一个 URL。
这是 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 重定向代码更新其索引。
您使用的是哪种语言/框架?
您应该能够创建自己的函数,在其中传递相关页面并从 HttpRequest 对象和 Server 对象(再次取决于语言或框架)推断出主机和 URL 是什么,然后只需简单地重定向到那个URL 但以 https 作为前缀。
这是一篇很好的CodeProject 文章,通过指定要使用 SSL 的某些目录和文件来执行此操作。它会根据您的需要自动将这些切换到 https 和从 https 切换。
我已经将它用于一个项目,并且效果非常好。
这与我在这里给出的答案相同:
是的你可以。我推荐这个免费的开源 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>
我们最终购买了 ISAPI Rewrite,以在 Web 服务器级别对某些 URL 执行重定向。当我问这个问题时,这并不是我想要的答案,但这对我们有用。