使用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的值。

获取ISAPI_Rewrite重写后的URL(转载)

发现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();
}

 结果是这样:

获取ISAPI_Rewrite重写后的URL(转载)

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

相关文章:

  • 2021-10-05
  • 2021-07-23
  • 2022-12-23
  • 2022-12-23
  • 2021-05-29
  • 2022-12-23
  • 2021-10-27
猜你喜欢
  • 2021-05-18
  • 2021-06-03
  • 2022-01-15
  • 2022-01-27
  • 2022-12-23
  • 2022-12-23
相关资源
相似解决方案