知识屋:更实用的电脑技术知识网站
所在位置:首页 > 编程技术 > ASP编程

ASP.NET中获得URL重写前的原始地址

发布时间:2011-02-18 16:59:53作者:知识屋

在ASP.NET中,假如你操纵了URL重写,经由过程HttpContext.Request获得到的是重写后的地址。假如这个地址要返回给客户端(比如Redirect),我们一般但愿是重写前的友爱地址。

凡是的操纵处景是当我们有某个页面需要用户登录才能拜候时,我们会在代码中鉴定当前拜候用户是不是登录,假如未登录,则重定向至登录页面,并将当前网址经由过程Url参数传递给登录页面。假如操纵了URL重写,并经由过程Request.Url.AbsoluteUri获得当前网址,用户登录后打开的就是重写后的地址,这固然不影响正常操纵,但从用户体验及URL同一的角度,我们更但愿是重写前的地址。

之前,我们在开辟中也被这个标题问题困扰,只能尽可能经由过程js重定向至登录页面(经由过程location.href获得当前网址)或在代码中手动写返回地址。

此刻,我们找到体会决编制,可以从Request.Headers中找到重写前的网址。

1)假如重写组件用的是ISAPI_Rewrite,则拜候被重写的网址时,Headers中会增加一项数据:Key为X-Rewrite-URL,值为重写前的网址。

2)假如重写组件用的是IIS自带的URL Rewrite模块,则Headers中增加的信息的Key为X-Original-URL。

如许我们就可以够轻松获得重写前的网址,示例代码以下:

 

 

以下为援引的内容:

if (Request.Headers["X-Rewrite-URL"] != null)

 

{

Response.Write("http://" + Request.Url.Host + Request.Headers["X-Rewrite-URL"]);

}

else if (Request.Headers["X-Original-URL"] != null)

{

Response.Write("http://" + Request.Url.Host + Request.Headers["X-Original-URL"]);

}

 

题外话:

ISAPI_Rewrite与IIS的URL Rewrite模块有个很小的辨别,却给从ISAPI_Rewrite迁徙至URL Rewrite带来了很年夜麻烦。比如:对http://www.cnblogs.com/cmt/这个网址,ISAPI_Rewrite是用“/cmt/”进行匹配,而URL Rewrite模块却用“cmt/”进行匹配,相差一个斜杠,却造成迁徙时要点窜在ISAPI_Rewrite中写的每条正则表达式。并窃冬URL Rewrite还供给了从ISAPI_Rewrite导进法则的功能,却没有考虑这类环境。

(免责声明:文章内容如涉及作品内容、版权和其它问题,请及时与我们联系,我们将在第一时间删除内容,文章内容仅供参考)
收藏
  • 人气文章
  • 最新文章
  • 下载排行榜
  • 热门排行榜