日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

获取ISAPI_Rewrite重写后的URL

發布時間:2025/3/21 编程问答 14 豆豆
生活随笔 收集整理的這篇文章主要介紹了 获取ISAPI_Rewrite重写后的URL 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

?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處理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();
}

?結果是這樣:

文中有些臆斷之處,還望各位大蝦不吝賜教!?

轉載于:https://www.cnblogs.com/parry/archive/2010/09/13/Get_URL_After_ISAPI_Rewrite.html

總結

以上是生活随笔為你收集整理的获取ISAPI_Rewrite重写后的URL的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。