获取ISAPI_Rewrite重写后的URL

简介:  ISAPI_Rewrite是一个较为好用的URL重写组件,安装和配置都比较简单,防盗链的设置也极其简单。 问题 如何获取被ISAPI_Rewrite重写后的URL。 测试环境:IIS6中使用ISAPI_Rewrite对Default.aspx进行重写,重写后的地址为:Index-After-ReWriter.html。

 ISAPI_Rewrite是一个较为好用的URL重写组件,安装和配置都比较简单,防盗链的设置也极其简单。

问题

如何获取被ISAPI_Rewrite重写后的URL。

测试环境:IIS6中使用ISAPI_Rewrite对Default.aspx进行重写,重写后的地址为:Index-After-ReWriter.html。

需要获取重写后的地址,即Index-After-ReWriter.html。

一些弯路

首先想到的就是Request对象,如Request.UrlRequest.RawUrl

测试后发现获取到的地址都是Default.aspx。

上网找了找ISAPI_Rewrite的处理流程图,找到了下面这个图片。

那么再来看下IIS处理aspx页面的流程图。

 

在提交到ASP.NET模块处理前,同样都是ISAPI扩展的aspnet_isapi.dll和ISAPI_Rewrite.dll,从第一张图中可以看出ISAPI_Rewrite.dll解析了重写后的URL(即测试环境中的Index-After-ReWriter.html),即解析成Default.aspx后再转由aspnet_isapi.dll进行处理。真的是这样吗?去IIS中去一看便知。

注意是在IIS中的网站全局属性中查看,如果需要使重写模块对单一的网站起作用那么需要单独对网站进行设置。

那么在Request对象中还会保存有重写后的URL地址吗?

又上网找了找,正如博文当你的博客文章的作者变成“编辑整理”,你作何感想?中提到的一样,带来的一个现象是点了前两页获取到的信息的都是这篇文章: 使用Request.RawUrl获取当前请求重写(UrlRewrite)后的Url

我基本保持文章中提供的源代码测试了下。

protected   override   void  OnInit(EventArgs e)
{
    
string  a  =  Request.ServerVariables[ " SCRIPT_NAME " ];
    
// string b = Request.ServerVariables["QUERY_STRING"];
    
// string c = Request.Url.AbsoluteUri;
    
// string d = Request.ServerVariables["HTTP_URL"];
     string  f  =  Request.Url.ToString();
    
base .OnInit(e);
}

调试了下,发现不管怎么获取,得到的值还是Default.aspx。:(

不过提供的源代码中那三段莫名其妙的注释提醒了我, 因为ISAPI_Rewrite这个组件是从Apache mod_rewrite移植过来的,那么PHP等其他语言应该有类似的通用方法,说的时髦点就是跨平台的方法去获取重写后的URL地址。

解决方法

 继续去查,发现的确是这样。

“在修改URL之前ISAPI_Rewrite会保存原URL到Http头,命名为X-Rewrite-URL。然后它能够在脚本中作为HTTP_X_REWRITE_URL服务器变量取回。因为在IIS里,系统变量名不能被修改,所以ISAPI_Rewrite不能提供与Apache兼容的变量名REQUEST_URI。如果你的应用程序的设计要依赖于REQUEST_URI变量,你必须修改它,用HTTP_X_REWRITE_URL变量来代替。”

使用抓包工具Fiddler抓包或者加断点查看Request.ServerVariables的值。

发现HTTP_X_REWRITE_URL中保存了重写前的URL地址。

可以这样测试一下。

protected   void  Page_Load( object  sender, EventArgs e)
{
    
if  (Request.ServerVariables[ " HTTP_X_REWRITE_URL " ==   null return ;
    Response.Write(Request.ServerVariables[
" HTTP_X_REWRITE_URL " ]);
    Response.End();
}

 结果是这样:

文中有些臆断之处,还望各位大虾不吝赐教! 


作者:Parry
出处:http://www.cnblogs.com/parry/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

相关文章
|
4月前
|
Web App开发 编解码 运维
LNMP详解(十二)——Nginx URL重写实战
LNMP详解(十二)——Nginx URL重写实战
51 2
|
4月前
|
开发框架 搜索推荐 中间件
中间件应用路由和URL重写
【5月更文挑战第2天】中间件应用路由和URL重写
36 3
中间件应用路由和URL重写
|
4月前
|
编解码 运维 搜索推荐
LNMP详解(十一)——Nginx URL重写原理
LNMP详解(十一)——Nginx URL重写原理
38 0
|
4月前
|
JavaScript Windows
VUE部署到IIS中报404错误解决方案-配置URL重写
VUE部署到IIS中报404错误解决方案-配置URL重写
206 0
|
iOS开发
解决alert在ios版微信中显示url的问题(重写alert)
解决alert在ios版微信中显示url的问题(重写alert)
93 0
|
移动开发
详解IIS中的重写工具下关于操作重定向URL中的{R:N}与{C:N}
详解IIS中的重写工具下关于操作重定向URL中的{R:N}与{C:N}
197 0
详解IIS中的重写工具下关于操作重定向URL中的{R:N}与{C:N}
|
缓存 应用服务中间件 Shell
Nginx实战(二) URL重写
Nginx实战(二) URL重写
153 0
|
1月前
|
开发框架 前端开发 .NET
Asp.net Webapi 的 Post 方法不能把参数加到 URL 中?试试这样写
Asp.net Webapi 的 Post 方法不能把参数加到 URL 中?试试这样写
|
1月前
|
Java
JAVA 获取 URL 指定参数的值
JAVA 获取 URL 指定参数的值
35 0
|
2月前
|
JavaScript 前端开发 数据格式
URL编码【详解】——Javascript对URL进行编码解码的三种方式的区别和使用场景,axios请求拦截器中对get请求的参数全部进行URL编码
URL编码【详解】——Javascript对URL进行编码解码的三种方式的区别和使用场景,axios请求拦截器中对get请求的参数全部进行URL编码
71 0