【发布时间】:2010-09-27 12:54:05
【问题描述】:
【问题讨论】:
【问题讨论】:
我更喜欢 (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,所以我假设您使用 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。
你已经完成了。
【讨论】:
我觉得很简单
Response.Redirect("https://somename.something.here/Dada.aspx");
【讨论】:
我记得不久前处理过同样的问题。我想确保某些页面通过 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 产品,因为它很简单。
我希望这会有所帮助...
【讨论】:
我只是遇到了同样的问题,但我发现使用纯 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。
【讨论】:
向浏览器发送重定向标头 (302)。
例子:
Response.Redirect("WebForm2.aspx")
difference between Server.Transfer and Response.Redirect上的文章
【讨论】: