日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) >

[转]URLRewrite隐藏.aspx后缀名的应用(转载+延伸)

發(fā)布時(shí)間:2025/3/20 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 [转]URLRewrite隐藏.aspx后缀名的应用(转载+延伸) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

本文轉(zhuǎn)自:http://www.cnblogs.com/showker/archive/2010/01/11/1644062.html

前言:為什么轉(zhuǎn)載這篇文章?因?yàn)樗兴伎加袑?shí)踐。最近因?yàn)闃I(yè)務(wù)的需要,要對(duì)Url進(jìn)行重寫,其實(shí)也不是重寫,也就是像在php中非常容易實(shí)現(xiàn)的隱藏.php后綴一樣來隱藏.aspx后綴。搜索不少文章,都提到URL重寫,但是對(duì)于如何隱藏.aspx后綴描述不清。經(jīng)過不懈搜索搜到這篇文章,按照其步驟,實(shí)現(xiàn)了如test.aspx,直接用test訪問.我實(shí)踐后想說的,實(shí)現(xiàn)隱藏.aspx,必須要在IIS里配置.*的隱射。而且伴隨在IIS中配置了.*的隱射后會(huì)帶來一系列問題。我目前碰到的有

0、在IIS中配置好.*的隱射后,還必須在handler中配置

???<add verb="*" path="*" type="URLRewriter.RewriterFactoryHandler, URLRewriter" />

否則會(huì)出現(xiàn)404錯(cuò)誤

1、默認(rèn)文檔無(wú)效的問題。比如輸入http://192.168.1.1/提示找不到"/",按理應(yīng)該跳轉(zhuǎn)到默認(rèn)文檔比如index.html。這時(shí)我們需要在規(guī)則里添加

???<!--因handlers的原因?qū)е履J(rèn)文檔失效如http://localhost/到不了index.html)-->
???<RewriterRule>
????<LookFor>~(/?)$</LookFor>
????<SendTo>~/index.html</SendTo>
???</RewriterRule>

2、html文件無(wú)法打開的問題。這個(gè)網(wǎng)上有網(wǎng)友碰到過,解決方法是
<compilation debug="true" >
????? <!-- 加上此節(jié)點(diǎn),保證原本就是.html類型的文件能正常訪問 -->
<buildProviders>
<add extension=".html" type="System.Web.Compilation.PageBuildProvider" />
</buildProviders>?
???? </compilation>

附件是我現(xiàn)在實(shí)現(xiàn)了無(wú)后綴名的web.config文件及使用的urlrewritting的dll,供大家參考。

轉(zhuǎn)載開始

學(xué)習(xí)正則表達(dá)式 小有一段時(shí)間了,但就現(xiàn)在的應(yīng)用情況來看,還是處于初級(jí)的基礎(chǔ)應(yīng)用水平,通過簡(jiǎn)單的使用正則,我覺得每當(dāng)有一個(gè)新問題、一種新需求出現(xiàn)時(shí),都需要考慮在正 則如何實(shí)現(xiàn)的范圍內(nèi),正則的格式或?qū)崿F(xiàn)方法可能都會(huì)需要靈活的變化,因?yàn)樵谡齽t的使用上有可能需要考慮地域、文化、甚至是國(guó)際條例等等當(dāng)然這是個(gè)特例,所以在設(shè)計(jì)正則表達(dá)式前,是需要盡可能的分析好要匹配或是處理的項(xiàng),以便在之后的實(shí)際應(yīng)用中不會(huì)因?yàn)橐粋€(gè)類似項(xiàng)的出現(xiàn)而無(wú)法實(shí)現(xiàn)原有的需求匹配、替換),同時(shí),一個(gè)設(shè)計(jì)很好的表達(dá)式在可讀性,甚至是效率上都會(huì)明顯的區(qū)別與設(shè)計(jì)過于復(fù)雜、而實(shí)現(xiàn)方式又不好的那些。所以從分析需求、應(yīng)用語(yǔ)法,到測(cè)試正則,這是基本的正則實(shí)現(xiàn)方法。

?

?

??? 由于正則的簡(jiǎn)要的語(yǔ)法和相關(guān)事項(xiàng)在網(wǎng)絡(luò)上都有詳細(xì)的說明,這里不在贅述,下面我通過結(jié)合個(gè)人的實(shí)際應(yīng)用,來簡(jiǎn)單的說明它的應(yīng)用,當(dāng)然涉及的正則式可能在某些地方也很是不足,但能得到大家的意見、指導(dǎo)……也對(duì)我以后的學(xué)習(xí)會(huì)有良好的推動(dòng)作用:)。參閱下面下述文檔前,如果還有時(shí)間,建議可以先看下Microsoft網(wǎng)站的一篇文章,因?yàn)樵诒硎錾鲜峭ㄟ^一個(gè)系統(tǒng)的功能實(shí)現(xiàn)來進(jìn)行的,且涉及URLRewriting

URLRewriteing的實(shí)現(xiàn)方法》
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnaspp/html/urlrewriting.asp

一、?????????? 實(shí)現(xiàn)URLRewrite的方法

URLRewrite的實(shí)現(xiàn),如果看過Microsoft的文章,則可以大致的了解其實(shí)現(xiàn)原理,然而它的實(shí)現(xiàn)方法也不僅僅是文中所提到的。?

以下為個(gè)人在實(shí)際應(yīng)用中實(shí)現(xiàn)URLRewrite的方法:

1、應(yīng)用IIS進(jìn)行配置(IIS5.0)

?????? IIS中找到應(yīng)用程序站點(diǎn)或程序?qū)?yīng)的虛擬目錄,右擊/屬性/目錄/應(yīng)用程序配置/配置/應(yīng)用程序映射選項(xiàng)/,然后選擇添加映射,在可執(zhí)行文件框中瀏覽aspnet_isapi.dll文件(一般為C:\WINNT\Microsoft.NET\Framework\v1.1.4322\aspnet_isapi.dll),擴(kuò)展名輸入.*(如果針對(duì).html的可直接輸入單個(gè)擴(kuò)展即可),動(dòng)作設(shè)為“POST,GET”(為減少不必要的資源耗費(fèi),不用設(shè)置為全部動(dòng)作),其他的默認(rèn)即可。之所以這樣做,是要把請(qǐng)求判斷權(quán)交給ASPNET處理,而不是IIS去刷選,所以這個(gè)映射是必要的。完成這里的操作后,繼續(xù)……

?????? 由于用戶請(qǐng)求連接時(shí)Application_BeginRequest()函數(shù)會(huì)被觸發(fā),所以只需要在這里判斷客戶端提交的請(qǐng)求就可以了,這就正是上面將IIS篩選權(quán)給ASPNET的原因所在。

?

2、要實(shí)現(xiàn)的需求情況:

?????? ?????? ??? 需求信息:

1、?處理靜態(tài)頁(yè)面.HTML.ASPX頁(yè)面的映射

2、?實(shí)現(xiàn)按照2006/8/4(/)2006/08/06(/)形式訪問站點(diǎn)時(shí),訪問到諸如.aspx?log_Year=2006&log_Month=8&log_Day=4的請(qǐng)求頁(yè)面

3、?2006/.aspx? log_Year=2006的映射

4、?2006/8(/)2006/08(/).aspx? log_Year=2006&log_Month=8的映射

5、?同步需要處理圖片、CSS、驗(yàn)證碼路徑的映射

6、?系統(tǒng)文章訪問按照“L數(shù)字.html”形式訪問,映射.aspx?logID=數(shù)字

7、?文章分類按照“C數(shù)字.html”形式訪問,映射.aspx?cateID=數(shù)字

8、?編輯文章時(shí)按照“E數(shù)字.html”形式訪問,映射.aspx?edit=數(shù)字

9、?……

3、實(shí)現(xiàn)方式:

?????? 有兩種方式通過正則進(jìn)行處理,一方面可以直接在后臺(tái)類代碼里寫正則匹配,還可以將編寫的正則放入指定的外部文件中進(jìn)行調(diào)用分析,諸如“Rewrite.config”

?????? 第一種方法實(shí)現(xiàn)時(shí),可以在Application_BeginRequest()觸發(fā)時(shí)進(jìn)行判斷處理,可改為任何所需要的訪問方式,無(wú)需第三方DLL的支持。

?

??????? 4、匹配語(yǔ)法&實(shí)現(xiàn):
?

????????????string?strRawUrl?=?HttpContext.Current.Request.RawUrl;//獲取當(dāng)前請(qǐng)求的URL后綴
????????????string?strNewUrl;//存放處理后的轉(zhuǎn)向URL信息
????????/**//*這里只給一個(gè)示范,其他需求的實(shí)現(xiàn)類似,只需要更改對(duì)應(yīng)的正則式,在下面的方法中將詳細(xì)的說明其實(shí)現(xiàn)*/
????????????
if?(Regex.IsMatch(strRawUrl,?@"(w+).html",?RegexOptions.IgnoreCase))
????????????
{
????????????????strNewUrl?=?Regex.Replace(strRawUrl,?@"(w+).html",?@"$1.aspx",?RegexOptions.IgnoreCase);
????????????????HttpContext.Current.RewritePath(?strNewUrl?);
????????????}
????????????
????????
/**//*處理圖片、樣式表、驗(yàn)證碼路徑類似……*/

?

第二種方法則是通過讀取、分析外部配置文件,從而獲得正則處理的輸入和格式串等信息,當(dāng)然這里也可以直接在默認(rèn)的Web.config文件里寫,我將它放到了單獨(dú)的Rewrite.config文件里,格式如下:?

????<?xml?version="1.0"?encoding="utf8"??>?
<RewriterConfig>
????
<Rules>????
????????
<RewriterRule><!--基本的靜態(tài)頁(yè)面訪問?default.html?blogpost.html-->
????????????
<LookFor>(w+).html</LookFor>
????????????
<SendTo>$1.aspx</SendTo>
????
</RewriterRule>????
/*其他的匹配類似?*/
????
</Rules>
</RewriterConfig>

?上面的需求可能比較簡(jiǎn)單,不是需要編寫大段的正則代碼,所以在邏輯上只要一步一步的設(shè)計(jì)下去即可。

1、從HTMLASPX的映射,這個(gè)比較簡(jiǎn)單,只是需要將.HTML的后綴映射為ASPX即可。

?

????????<RewriterRule><!--基本的靜態(tài)頁(yè)面訪問?default.html?blogpost.html-->
????????????
<LookFor>(w+).html</LookFor>
????????????
<SendTo>$1.aspx</SendTo>
??????
</RewriterRule>

?

上面的()號(hào),表示一個(gè)捕獲組,匹配的字符作為最終匹配的部分

?????? ???????? 22006/8/4(/)2006/08/06(/)形式訪問站點(diǎn)時(shí),映射為

.aspx?log_Year=2006&log_Month=8&log_Day=4的請(qǐng)求

?????? 這里的實(shí)現(xiàn)和上面一樣,需要匹配特定的symbol(數(shù)字、符號(hào)),這里有兩種情況需要考慮在內(nèi)月份和具體的天,有可能是單個(gè)數(shù)字,也可能是兩個(gè)數(shù)字組成,所以利用簡(jiǎn)單的匹配項(xiàng),構(gòu)建如下:

?????? (\d{4})/(\d{1,2})/(\d{1,2})(/?)$

???????? {1,2}表示了匹配前面的內(nèi)容項(xiàng)時(shí),該項(xiàng)是12個(gè)元素組成,$字符指示了至此該匹配串結(jié)束,后面不會(huì)有其他任何字符元素,同上,()組將作為最終輸出的匹配項(xiàng)。

???????? 傳遞匹配值如下:

?????????????????? default.aspx?log_Year=$1&amp;log_Month=$2&amp;log_Day=$3

?????????????????? //\d表示的是0—9的數(shù)字,{4}表示前匹配項(xiàng)有4個(gè)元素

?????????????????? // /?表示“/”字符可有可無(wú),?則表示前面匹配項(xiàng)為1次或0次出現(xiàn)

???????? //&amp;表示的是實(shí)際要用的“&”字符,它作為URL參數(shù)的連接項(xiàng),在這里需要進(jìn)行轉(zhuǎn)換,否則讀取時(shí)將會(huì)出錯(cuò)。

?

?????? 3)、2006/.aspx? log_Year=2006的映射

????????????? ?實(shí)現(xiàn)方式如上,(\d{4})/(\d{1,2})(/?)$

?????? 4)、同步需要處理圖片、CSS、驗(yàn)證碼的相對(duì)路徑問題

由于在表達(dá)式匹配后,相對(duì)的圖片、CSS,甚至動(dòng)態(tài)生成的圖片驗(yàn)證碼都將不會(huì)正常顯示,因?yàn)槠ヅ鋵⑻鎿Q頁(yè)面的默認(rèn)路徑,比如輸入2006/來訪問時(shí),圖片的相對(duì)路徑也將變?yōu)?/span>http://www.XXX.cn/blog/2006/images/…….gif,而不是原來的http://www.XXX.cn/blog/images/…….gif,所以要去實(shí)現(xiàn)這樣的轉(zhuǎn)換,為減少正則的復(fù)雜性,我將各種情況進(jìn)行了單獨(dú)處理,

????????????? 2006/images :(\d{4})/([images|styles]+)/(.+)

?????? ?????? 引用:$2/$3

???????? 中間的“[images|styles]”表示沒有用通用的字符去匹配,因?yàn)檫€可能有其他的類似目錄,為防止替換,這里我是這樣限制的,“(.+)”這里表示的是只要包含前面的images|styles路徑信息則都會(huì)匹配的,而不看它后面的串信息。

?

?????????????????? 2006/6/19/images: (\d{4})/(\d{1,2})/(\d{1,2})(/?)([images|styles]+)/(.+)
??????????????????
引用: $5/$6

?????????????????? 同上

?????????????????? 2006/6/images: (\d{4})/(\d{1,2})/([images|styles]+)/(.+)

?????????????????? 引用: $3/$4

????????????? 同上

?

?????? 5)、系統(tǒng)文章瀏覽按照“L數(shù)字.html”形式,文章分類列表信息按照“C數(shù)字.html”

問,編輯文章時(shí)按照“E數(shù)字.html”訪問……等,???? 這里和上面的靜態(tài)頁(yè)面匹配是同用的。

首先看文章瀏覽“L數(shù)字.html”,這里的HTML會(huì)被自動(dòng)的匹配為ASPX,而數(shù)字也將會(huì)被匹配,并進(jìn)行處理映射處理。如下:

?

????<LookFor>/(d{4})?/?(d{1,2})?/?(d{1,2})?/?log(d+).html</LookFor>
????
<SendTo>/blogview.aspx?logID=$4&amp;page=1</SendTo>

?

?????? 由上面的幾種情況在分開處理時(shí)是較為簡(jiǎn)單的,當(dāng)然還可以將它們放到一個(gè)表達(dá)式中進(jìn)行匹配處理,這在實(shí)現(xiàn)上相對(duì)復(fù)雜了一些,之前也沒有時(shí)間去檢查、修改,所以有興趣的朋友可以思考下哦J

?

?????? 在實(shí)現(xiàn)上述正則的編寫后,需要在后臺(tái)類里進(jìn)行處理(提取、正則匹配),和第一種方式相同,在應(yīng)用程序開始請(qǐng)求的時(shí)候處理,Application_BeginRequest編碼如下:

?

????????????????string?path=Server.MapPath("~/Rewrite.config");?//外部正則存放路徑
????????????????XPathDocument?myXPathDocument?=?new?XPathDocument(path);
????????????????XPathNavigator?myXPathNavigator?=?myXPathDocument.CreateNavigator();
XPathNodeIterator?myXPathNodeIterator?=??myXPathNavigator.Select?("//RewriterRule");
????????????????
while?(myXPathNodeIterator.MoveNext())
????????????????
{
????????????????????
//循環(huán)遍歷Rewrite文件里的所有節(jié)點(diǎn)信息,對(duì)單條匹配規(guī)則也逐條處理(略)
????????????????????
//獲取LookFor、SendTo后,傳遞給后臺(tái)正則需要匹配的串、格式等
????????????????????
//同時(shí)重寫路徑信息
strNewUrl?=?Regex.Replace(strRawUrl,oldString,newString,RegexOptions.IgnoreCase);
????????????????HttpContext.Current.RewritePath(?strNewUrl?);
???????????????????}

?

上面簡(jiǎn)單的說明了正則的一個(gè)實(shí)際應(yīng)用的例子,實(shí)現(xiàn)的并不是復(fù)雜,關(guān)鍵是寫正則前的分析與多種情況的考慮,限于篇幅,下面給出分布實(shí)現(xiàn)的幾個(gè)方面,如下:

?

<?xml?version="1.0"?encoding="utf-8"??>
<RewriterConfig>
????
<Rules>????
????????
<RewriterRule><!--基本的靜態(tài)頁(yè)面訪問?default.html?blogpost.html-->
????????????
<LookFor>(w+).html</LookFor>
????????????
<SendTo>$1.aspx</SendTo>
????????
</RewriterRule>????????????????????????????
????????
<!--====以下格式不能合并完成,因?yàn)椴煌?qǐng)求不同路徑===-->
????????
<RewriterRule><!--2006/6/19的格式訪問2006/6/19(/?)-->
????????????
<LookFor>(d{4})/(d{1,2})/(d{1,2})(/?)$</LookFor>
????????????
<SendTo>default.aspx?log_Year=$1&amp;log_Month=$2&amp;log_Day=$3</SendTo>
????????
</RewriterRule>
????????
<RewriterRule><!--重寫圖片和樣式表路徑2006/6/19/images-->
????????????
<LookFor>(d{4})/(d{1,2})/(d{1,2})(/?)([images|styles]+)/(.+)</LookFor>
????????????
<SendTo>$5/$6</SendTo>
????????
</RewriterRule>????????
????????
<RewriterRule><!--重寫驗(yàn)證碼路徑2006/6/19/checkcode.aspx-->
????????????
<LookFor>(d{4})/(d{1,2})/(d{1,2})(/?)checkcode.aspx</LookFor>
????????????
<SendTo>checkcode.aspx</SendTo>
????????
</RewriterRule>????????
????????
<RewriterRule><!--重寫通過2006/6/19訪問后?2006/6/19/blogview.aspx?logID=……等-->
????????????
<LookFor>(d{4})/(d{1,2})/(d{1,2})(/?)(w+).aspx</LookFor>
????????????
<SendTo>$5.aspx</SendTo>
????????
</RewriterRule>????????????????????????????????????????
????????
<!--============================================-->
????????
<!--只請(qǐng)求blog目錄時(shí)的處理,交給ASPNET處理,默認(rèn)文件不能訪問的處理-->
????????
<!--http://www.mcan.cn/blog(/)-->
????????
<RewriterRule><!--blog/?or?blog?-->
????????????
<LookFor>(.*)/blog(/?)$</LookFor>
????????????
<SendTo>$1/blog/default.aspx</SendTo>
????????
</RewriterRule>????????
????????
<RewriterRule>
????????????
<LookFor>^(/?)images/(.+)</LookFor>
????????????
<SendTo>/blog/images/$2</SendTo>
????????
</RewriterRule>????????
????????
<!--============================================-->????????????????
????????
<RewriterRule><!--分類訪問-->
????????????
<LookFor>/(d{4})?/?(d{1,2})?/?(d{1,2})?/?c(d+).html</LookFor>
????????????
<SendTo>/default.aspx?cateID=$4</SendTo>
????????
</RewriterRule>????????????
????????
<RewriterRule><!--單個(gè)日志訪問-->
????????????
<LookFor>/(d{4})?/?(d{1,2})?/?(d{1,2})?/?log(d+).html</LookFor>
????????????
<SendTo>/blogview.aspx?logID=$4&amp;page=1</SendTo>
????????
</RewriterRule>????????????
????????
<RewriterRule><!--2006/6/6/default.html?類似的形式?非c2、log2、edit2等-->
????????????
<LookFor>/(d{4})?/?(d{1,2})?/?(d{1,2})?/?([a-zA-Z]+).html</LookFor>
????????????
<SendTo>/$4.aspx</SendTo>
????????
</RewriterRule>????????????
????????
<RewriterRule><!--單個(gè)日志編輯-->
????????????
<LookFor>/(d{4})?/?(d{1,2})?/?(d{1,2})?/?edit(d+).html</LookFor>
????????????
<SendTo>/blogedit.aspx?logID=$4</SendTo>
????????
</RewriterRule>????????????????????????
????
</Rules>
</RewriterConfig>



要真正的學(xué)好正則、應(yīng)用正則的確是很不容易,所以在平時(shí)的學(xué)習(xí)中還是要經(jīng)過大量的實(shí)踐與思考,我也會(huì)積極的向各位同仁請(qǐng)教、學(xué)習(xí),希望大家不吝賜教!

附件web.config及所使用的urlrewritting的dll

?/Files/showker/WebConfig.rar

轉(zhuǎn)載于:https://www.cnblogs.com/freeliver54/archive/2013/03/01/2938116.html

總結(jié)

以上是生活随笔為你收集整理的[转]URLRewrite隐藏.aspx后缀名的应用(转载+延伸)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。