我的网站有一个由http访问的公共部分和一个需要登录的https部分。当注销网站时,它会重定向到http公共索引页面。
以前我也这样做过,说明完整的网址指向。最近我不得不去掉这些东西,这样网站就可以在许多域上运行,进行测试。
我尝试使用UriBuilder将https链接转换为http链接,这样网站就不再需要直接指向特定的url。这应该允许网站使用任何域名。现在它指向计算机名称。
if (Request.IsSecureConnection)
{
UriBuilder ub = new UriBuilder();
ub.Path = "/html/index.html";
ub.Scheme = Uri.UriSchemeHttp;
ub.Port = -1; // use default port for scheme
Response.Redirect(ub.Uri.ToString(), true);
//An old direct link to the site
//Response.Redirect("http://www.someaddress.com/html/index.html");
}
当代码在测试服务器上远程触发而不是指向正确的域时,它会将我返回到地址
http://localhost/html/index.html
代替
http://testserver/html/index.html
我不知道它为什么要这样做,而不是返回我通过连接到服务器的地址。
如果不指定主机,将使用默认主机("localhost"
)-请参阅MSDN上的UriBuilder()
构造函数文章。
修复:指定主机(可能基于传入请求的主机)。
ub.Host = GetMeIncomingHost();
因为在重定向到的URI中,您没有指定权限(主机)。因此,您的重定向发送一个302 Found
HTTP状态,并且响应包含一个类似于以下内容的location:
标头:
location: /html/index.html
这是一个相对URI,相对于重定向请求源自的当前URI。这意味着它继承了请求页面的scheme和authority组件(显然,在您的情况下,它是http://localhost:xx/...
.
要解决此问题,请在UriBuilder
的构造函数中为其添加HttpContext.Current.Request.Url
。应该这样做:
UriBuilder ub = new UriBuilder( HttpContext.Current.Request.Url );
ub.Path = "/html/index.html";
Response.Redirect(ub.Uri.ToString(), true);