开发者社区> 狼人2007> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

一起谈.NET技术,获取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"== nullreturn;
    Response.Write(Request.ServerVariables[
"HTTP_X_REWRITE_URL"]);
    Response.End();
}

   结果是这样:

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

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
Nginx反向代理/location/URL重写功能实战| 学习笔记
快速学习Nginx反向代理/location/URL重写功能实战。
0 0
Nginx反向代理/location/URL重写功能实战
一、Nginx反向代理常用实战 二、location 应用实例
0 0
UrlRewrite:重写url,实现伪静态、缩短URL、高安全性
UrlRewrite:重写url,实现伪静态、缩短URL、高安全性
0 0
如何在 ASP.NET Core 中重写 URL
如何在 ASP.NET Core 中重写 URL
0 0
session 之 url 重写|学习笔记
快速学习 session 之 url 重写
0 0
修改.htaccess域名www与不带www301重定向跳转重写URL
Apache下web环境,通过修改.htaccess文件即可实现重写URL,尤其是处于SEO考虑,将域名格式统一,例如将带www的域名统一301重定向到不带www的域名,或者将不带www的域名统一301重定向到带www的域名。
425 0
Nginx之9易筋神功 - (URL重写)
Nginx从入门到深入之URL重写
1256 0
Nginx实现URL重写
利用Nginx实现URL重写,本文使用Nginx与静态页面配合重写URL。
941 0
初识 JSP---(Cookie / 重写URL / 防止表单重复提交)
Cookie Cookie是servlet发送到web浏览器的少量信息,这些信息由浏览器保存,然后发送回服务器, cookie一般用来保存session的id的会话。
1304 0
+关注
狼人2007
个人对技术的追求:代码少而精捍;思路清晰美观;可扩展好维护;技术驱动商业; 人生格言:只要你有信念,有追求,并且坚持,那你一定比随波逐流,行得远行得正...
文章
问答
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载