【问题标题】:How do you forward http request to a https url你如何将http请求转发到https url
【发布时间】:2010-09-27 12:54:05
【问题描述】:

正如问题所说,如果我在我的网站上请求这样的页面

http://somename.something.here/Dada.aspx

这样的事情

https://somename.something.here/Dada.aspx

【问题讨论】:

    标签: asp.net http ssl https


    【解决方案1】:

    我更喜欢 (a) 不重定向本地连接(以简化 VS 下的开发),并且 (b) 使用 UriBuilder 而不是字符串。替换更准确一些。

    if (!Request.IsLocal && !Request.IsSecureConnection) {
        var ub = new UriBuilder(Request.Url);
        ub.Scheme = Uri.UriSchemeHttps;
        ub.Port = -1; // use default port for scheme
        Response.Redirect(ub.Uri.AbsoluteUri, true);
        return;
    }
    

    【讨论】:

    • 感谢在其中创建一个基本页面并更改整个项目的继承,谢谢人
    • 这样做的一个问题是您只会保护 ASP.NET 页面。
    • 目前,这是我必须处理的唯一问题,但感谢您的通知。
    • 对于不需要 https 的页面,您是如何处理将访问者转回 http 的?
    • 很好的答案!很好很简单的剪切和粘贴。
    【解决方案2】:

    您标记了 ASP.NET,所以我假设您使用 IIS。在您网站的 Web Root 中创建一个文件,将其命名为 SSL_Redirect.htm 或类似名称。把这个 Javascript 放在那里:

    <Script language="JavaScript"> 
    <!-- begin hide 
    
    function goElseWhere() 
    { 
    
    var oldURL = window.location.hostname + window.location.pathname; 
    
    
    var newURL = "https://" + oldURL; 
    
    query = '' + window.location; 
    position = query.indexOf('?'); 
    if (position > -1) 
    { 
    query = query.substring(position + 1); 
    newURL = newURL + "?" + query; 
    } 
    
    
    window.location = newURL; 
    
    } 
    goElseWhere(); 
    
    // end hide --> 
    </script> 
    

    现在,转到您网站的属性。转到客户错误选项卡,查找 403.4 错误并进行编辑。将其更改为使用 /SSL_Redirect.htm(或您命名的任何名称)的 URL。现在,在 IIS Admin 中,找到该文件 SSL_Redirect.htm,右键单击,转到属性。转到文件安全并取消选中该特定文件的需要 SSL。

    你已经完成了。

    【讨论】:

      【解决方案3】:

      我觉得很简单

      Response.Redirect("https://somename.something.here/Dada.aspx");
      

      【讨论】:

        【解决方案4】:

        我记得不久前处理过同样的问题。我想确保某些页面通过 https,而其余页面则使用 http。我还想确保一旦访问者离开安全页面,访问不需要安全的页面,他们就会返回 http。为此,我探索了两种选择:

        第一个选项是我可以使用免费的.NET URLRewriter 项目来重写配置文件中列出的特定页面:

        # HTTP REQUIRED PAGES
        RewriteCond %{HTTPS} =on
        RewriteCond %{REQUEST_URI} !(/login\.aspx|/securepage\.aspx).*$ [NC]
        RewriteCond %{HTTP_HOST} (.+)
        RewriteRule ^(.*)$ http://%3$1 [R=301,L]
        
        # HTTPS REQUIRED PAGES
        RewriteCond %{HTTPS} =off
        RewriteCond %{REQUEST_URI} (/login\.aspx|/securepage\.aspx).*$ [NC]
        RewriteCond %{HTTP_HOST} (.+)
        RewriteRule ^(.*)$ https://%3$1 [R=301,L]
        

        使用此配置,我可以确保只有两个页面是安全的,而其余页面将是不安全的。我用这个选项得到了很好的结果。

        第二个选项是在我找到一个专门用于处理这个问题的完整解决方案之后出现的。这家公司是 SanibelLogic,他们有一个名为 SSLRedirect 的产品。这个基于 HTTPModule 的解决方案正是我所需要的。它确实要花一点钱,但如果你想要一些简单的实现和管理,这可能符合要求。如果您想对其进行编辑,他们甚至会提供源代码...

        我使用这两个选项已有好几个月了,但最终还是使用了 SSLRedirect 产品,因为它很简单。

        我希望这会有所帮助...

        【讨论】:

          【解决方案5】:

          我只是遇到了同样的问题,但我发现使用纯 IIS 配置的不同解决方案。

          有两种方式:

          (1) 例如,简单的方法是将您的 MyWebApp 重命名为 MyWebAppSSL。为后者启用 SSL。然后在您的 IIS 中创建一个新的空文件夹,类似于旧的 MyWebApp。单击 MyWebApp 的属性,然后在“目录”下选择“重定向到 URL”并将http://MyServer/MyWebAppSSL 放在那里。建议为它启用“永久重定向”。顺便说一下,您不需要为 MyWebApp 点击“创建 Web 应用程序”按钮,因为它不是 Web 应用程序,只是进行重定向。

          (2) 简单的方法当然有缺点,从现在开始,您的应用程序将以新名称运行(本例中以 -SSL 结尾)。如果我们需要保持它以相同的旧名称运行,也可以通过仅配置 IIS 来实现,但我们必须采取一些不同的方式。我们将不得不在运行在不同端口上的 IIS 上设置一个新的 Web 空间。我找到了这个很好的描述:How to Auto-Redirect to a SSL-secured Site in IIS

          【讨论】:

            【解决方案6】:

            向浏览器发送重定向标头 (302)。

            例子:

            Response.Redirect("WebForm2.aspx")
            

            difference between Server.Transfer and Response.Redirect上的文章

            【讨论】:

            • 您需要做的还不止这些。您必须为 403.4 使用自定义错误。
            • 同样,如果你这样做,你会丢失查询字符串等等。
            • 答案旨在为提问者指明正确的方向,而不是一站式复制、粘贴和编译解决方案。
            猜你喜欢
            • 2016-04-26
            • 2019-11-17
            • 1970-01-01
            • 2012-08-24
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多