使用URL Rewrite和404.aspx配置中,如何解决ASP.NET回发问题?

更新于
2026-09-25 00:31:59
11阅读来源:SEO资讯
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计474个文字,预计阅读时间需要2分钟。

使用URL Rewrite和404.aspx配置中,如何解决ASP.NET回发问题?

在网站上使用URL重写,将以下URL:

http://mysite.com/users/john

重写为:

http://mysite.com/index.aspx?user=john

需要使用IIS6实现无扩展名的重写,且无法访问托管服务器。可以使用404-approach方法处理。

我在我的网站上使用URL重写来获取以下URL:
mysite.com/users/john
代替
mysite.com/index.aspx?user=john

要使用IIS6实现这种无扩展的重写并且无法访问托管服务器,我使用“404-approach”.当服务器找不到请求时,执行映射的404页面,因为这是一个aspx页面,可以执行重写(我可以使用托管服务上的控制面板设置404映射).

这是Global.asax中的代码:

protected void Application_BeginRequest(object sender, EventArgs e) { string url = HttpContext.Current.Request.Url.AbsolutePath; if (url.Contains("404.aspx")) { string[] urlInfo404 = Request.Url.Query.ToString().Split(';'); if (urlInfo404.Length > 1) { string requestURL = urlInfo404[1]; if (requestURL.Contains("/users/")) { HttpContext.Current.RewritePath("~/index.aspx?user=" + GetPageID(requestURL)); StoreRequestURL(requestURL); } else if (requestURL.Contains("/picture/")) { HttpContext.Current.RewritePath("~/showPicture.aspx?pictureID=" + GetPageID(requestURL)); StoreRequestURL(requestURL); } } } } private void StoreRequestURL(string url) { url = url.Replace("", ""); url = url.Substring(url.IndexOf("/")); HttpContext.Current.Items["VirtualUrl"] = url; } private string GetPageID(string requestURL) { int idx = requestURL.LastIndexOf("/"); string id = requestURL.Substring(idx + 1); id = id.Replace(".aspx", ""); //Only needed when testing without the 404-approach return id; }

在我的主页上的Page_Load中,我在form-tag的action-attribute中设置了正确的URL.

使用URL Rewrite和404.aspx配置中,如何解决ASP.NET回发问题?

protected void Page_Load(object sender, EventArgs e) { string virtualURL = (string)HttpContext.Current.Items["VirtualUrl"]; if (!String.IsNullOrEmpty(virtualURL)) { form1.Action = virtualURL; } }

重写工作正常,但是当我在页面上执行回发时,不会执行回发,这可以以某种方式解决吗?

问题似乎与404方法有关,因为当我尝试没有它(并且失去无扩展功能)时,回发工作.那是我要求的时候:
mysite.com/users/john.aspx

这可以解决,还是有任何其他解决方案满足我的要求(IIS6,没有serveraccess / ISAPI过滤器和无扩展).

form1.Action = Request.RawUrl

与…结合

HttpContext.Current.RewritePath("/Default.aspx", true);

对我来说效果很好.

设置表单Action属性是我缺少的那个…

谢谢你的解决方案!

本文共计474个文字,预计阅读时间需要2分钟。

使用URL Rewrite和404.aspx配置中,如何解决ASP.NET回发问题?

在网站上使用URL重写,将以下URL:

http://mysite.com/users/john

重写为:

http://mysite.com/index.aspx?user=john

需要使用IIS6实现无扩展名的重写,且无法访问托管服务器。可以使用404-approach方法处理。

我在我的网站上使用URL重写来获取以下URL:
mysite.com/users/john
代替
mysite.com/index.aspx?user=john

要使用IIS6实现这种无扩展的重写并且无法访问托管服务器,我使用“404-approach”.当服务器找不到请求时,执行映射的404页面,因为这是一个aspx页面,可以执行重写(我可以使用托管服务上的控制面板设置404映射).

这是Global.asax中的代码:

protected void Application_BeginRequest(object sender, EventArgs e) { string url = HttpContext.Current.Request.Url.AbsolutePath; if (url.Contains("404.aspx")) { string[] urlInfo404 = Request.Url.Query.ToString().Split(';'); if (urlInfo404.Length > 1) { string requestURL = urlInfo404[1]; if (requestURL.Contains("/users/")) { HttpContext.Current.RewritePath("~/index.aspx?user=" + GetPageID(requestURL)); StoreRequestURL(requestURL); } else if (requestURL.Contains("/picture/")) { HttpContext.Current.RewritePath("~/showPicture.aspx?pictureID=" + GetPageID(requestURL)); StoreRequestURL(requestURL); } } } } private void StoreRequestURL(string url) { url = url.Replace("", ""); url = url.Substring(url.IndexOf("/")); HttpContext.Current.Items["VirtualUrl"] = url; } private string GetPageID(string requestURL) { int idx = requestURL.LastIndexOf("/"); string id = requestURL.Substring(idx + 1); id = id.Replace(".aspx", ""); //Only needed when testing without the 404-approach return id; }

在我的主页上的Page_Load中,我在form-tag的action-attribute中设置了正确的URL.

使用URL Rewrite和404.aspx配置中,如何解决ASP.NET回发问题?

protected void Page_Load(object sender, EventArgs e) { string virtualURL = (string)HttpContext.Current.Items["VirtualUrl"]; if (!String.IsNullOrEmpty(virtualURL)) { form1.Action = virtualURL; } }

重写工作正常,但是当我在页面上执行回发时,不会执行回发,这可以以某种方式解决吗?

问题似乎与404方法有关,因为当我尝试没有它(并且失去无扩展功能)时,回发工作.那是我要求的时候:
mysite.com/users/john.aspx

这可以解决,还是有任何其他解决方案满足我的要求(IIS6,没有serveraccess / ISAPI过滤器和无扩展).

form1.Action = Request.RawUrl

与…结合

HttpContext.Current.RewritePath("/Default.aspx", true);

对我来说效果很好.

设置表单Action属性是我缺少的那个…

谢谢你的解决方案!