ISAPI_Rewrite是一个较为好用的URL重写组件,安装和配置都比较简单,防盗链的设置也极其简单。
问题如何获取被ISAPI_Rewrite重写后的URL。
测试环境:IIS6中使用ISAPI_Rewrite对Default.aspx进行重写,重写后的地址为:Index-After-ReWriter.html。
需要获取重写后的地址,即Index-After-ReWriter.html。
一些弯路首先想到的就是Request对象,如Request.Url和Request.RawUrl。
测试后发现获取到的地址都是Default.aspx。
上网找了找ISAPI_Rewrite的处理流程图,找到了下面这个图片。
注意是在IIS中的网站全局属性中查看,如果需要使重写模块对单一的网站起作用那么需要单独对网站进行设置。
那么在Request对象中还会保存有重写后的URL地址吗?
又上网找了找,正如博文当你的博客文章的作者变成“编辑整理”,你作何感想?中提到的一样,带来的一个现象是点了前两页获取到的信息的都是这篇文章: 使用Request.RawUrl获取当前请求重写(UrlRewrite)后的Url。
我基本保持文章中提供的源代码测试了下。
调试了下,发现不管怎么获取,得到的值还是Default.aspx。:(
不过提供的源代码中那三段莫名其妙的注释提醒了我, 因为ISAPI_Rewrite这个组件是从Apache mod_rewrite移植过来的,那么PHP等其他语言应该有类似的通用方法,说的时髦点就是跨平台的方法去获取重写后的URL地址。
解决方法继续去查,发现的确是这样。
结果是这样:
文中有些臆断之处,还望各位大虾不吝赐教!