发布时间: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导进法则的功能,却没有考虑这类环境。
2013-08-11
ASP程序员必备的知识
网站建设:ASP网站防范黑客技巧
ADO 存取数据库时如何分页显示
ASP中set与dim的区别(自己的理解)
为你的ASP程序作一个负载测试
ASP用户登录模块的设计
asp获取文件md5值
asp生成静态HTML(动态读取)
ASP.NET中获得URL重写前的原始地址