我外网端口是9004,映射 到内网服务器的端口是80,那么我通过 外网访问网址
如,http://*******:9004/index.aspx,在这个页面里有一个response.redirect跳转到
response.redirect("a.aspx");希望能够跳转到http://******:9004/a.aspx,可结果是跳转到http://*****:80/a.aspx,根据 内网映射的端口了,这个有什么解决办法,我看网上说可以在web.config中配置就可以了,但没有明说配置什么,各位大牛们有碰到过类似 问题,有解决办法吗?
<httpRuntime useFullyQualifiedRedirectUrl="false"
/>
没有这么神奇的配置的。内网站点也部署到9004端口咯
response.redirect 是这样实现的。看名字也知道了
public string ApplyAppPathModifier(string virtualPath) { CookielessHelperClass arg_0B_0 = this._context.CookielessHelper; if (virtualPath == null) { return null; } if (UrlPath.IsRelativeUrl(virtualPath)) { virtualPath = UrlPath.Combine(this.Request.ClientBaseDir.VirtualPathString, virtualPath); } else { if (!UrlPath.IsRooted(virtualPath) || virtualPath.StartsWith("//", StringComparison.Ordinal)) { return virtualPath; } virtualPath = UrlPath.Reduce(virtualPath); } if (this._appPathModifier == null || virtualPath.IndexOf(this._appPathModifier, StringComparison.Ordinal) >= 0) { return virtualPath; } string appDomainAppVirtualPathString = HttpRuntime.AppDomainAppVirtualPathString; int num = appDomainAppVirtualPathString.Length; bool flag = virtualPath.Length == appDomainAppVirtualPathString.Length - 1; if (flag) { num--; } if (virtualPath.Length < num) { return virtualPath; } if (!StringUtil.EqualsIgnoreCase(virtualPath, 0, appDomainAppVirtualPathString, 0, num)) { return virtualPath; } if (flag) { virtualPath += "/"; } if (virtualPath.Length == appDomainAppVirtualPathString.Length) { virtualPath = virtualPath.Substring(0, appDomainAppVirtualPathString.Length) + this._appPathModifier + "/"; } else { virtualPath = virtualPath.Substring(0, appDomainAppVirtualPathString.Length) + this._appPathModifier + "/" + virtualPath.Substring(appDomainAppVirtualPathString.Length); } return virtualPath; } private string ConvertToFullyQualifiedRedirectUrlIfRequired(string url) { HttpRuntimeSection httpRuntime = RuntimeConfig.GetConfig(this._context).HttpRuntime; if (httpRuntime.UseFullyQualifiedRedirectUrl || (this.Request != null && this.Request.Browser["requiresFullyQualifiedRedirectUrl"] == "true")) { return new Uri(this.Request.Url, url).AbsoluteUri; } return url; }
重定向的不是服务器重定向,是发送301,客户端通过Location二次定向;
既然是这样,可是你却写相对地址,那么.net哪里知道你真实的目的地,肯定只要写相对都按照自身默认的进行组装。
因此办法你也知道了,但是你可能又觉得有的地方(可能不止一次这么用)这么直接改太不爽了,那又怎么干既保持原有,又可以自己决定呢——你可以写个扩展函数,比如叫RedirectAbsolute()
不能用绝对地址么