答案 0 :(得分:11)
我更喜欢(a)不重定向本地连接(以简化VS下的开发),以及(b)使用UriBuilder而不是string.Replace,因为它更精确。
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;
}
答案 1 :(得分:1)
您标记了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(或任何您命名的URL)。现在,在IIS Admin中,找到该文件,SSL_Redirect.htm,右键单击,转到属性。转到文件安全性并取消选中该特定文件的“需要SSL”。
你已经完成了。
答案 2 :(得分:1)
我认为它就像witing一样简单
Response.Redirect("https://somename.something.here/Dada.aspx");
答案 3 :(得分:0)
我记得有一段时间处理同样的问题。我想确保某些页面是通过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产品,因为它非常简单。
我希望这会有所帮助......
答案 4 :(得分:0)
我遇到了同样的问题,但我发现使用纯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。
答案 5 :(得分:-1)
将重定向标题(302)发送到浏览器。
示例:
Response.Redirect("WebForm2.aspx")
的文章