亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

URL重寫可刪節日期模式---正則表達式之強力應用

2019-11-18 16:43:37
字體:
來源:轉載
供稿:網友

最近忙著自己的博客程序,自然而然就轉到了博客中老生長談的URL重寫問題。一個原因是在多用戶博客系統中的一個面子問題,本來想拿我的CSDN博客http://blog.csdn.net/joshualang來說事,想想還是用我的空間(http://www.tyoo.net)吧,因為這是我的博客完功之后的去所了。

http://www.tyoo.net/blog/joshualang 如若不進行必要的URL重寫,就會出http://www.tyoo.net/blog/default.aspx?Bloger=joshualang樣子的博客地址;大家要知道BLOG可謂是大部分網民視為筑在網絡上的另一個家,現實生活中會考慮家的地址遠近,交通好壞,同樣網絡中的家也要有個好記的門牌號的。這個門牌號還不算太長(還不是很體面哦),后邊在加上一堆的參數只怕讓人慢慢見而生畏,要看文章就要面對這么一大堆http://blog.tyoo.net/Articles/Default.aspx?Bloger=joshualang&ArticleID=20070118234530是不是有什么感覺了?再看看現在好多博客程序都要得到的一種效果吧http://blog.tyoo.net/joshua/Articles/2007/01/18/大家一看就知道這種效果的好處了,這也就引到了本文的重點所在了!

是的,要通過這樣一個很規整的字符串來達到我們的一個目標。

一個可行的URL應該遵循以下標準來選擇 :

• 簡短。
 
• 易于鍵入。
 
• 可以看出站點的結構。
 
• “可刪節”,允許用戶通過刪除 URL 的組成部分來瀏覽站點。
 

致于這點就不用我來多說了,其實都是要突出簡單,實用。

注意:說到這里就有必要看看MSDN網站上Scott Mitchell的一遍文檔http://www.microsoft.com/china/msdn/library/webservices/asp.net/URLRewriting.mspx?pf=true#top

已經有專家在這里將URL重寫的原理講得足夠明確了,不懂還可以下載上邊文檔的源代碼 來研究一下。

為了圖效率(人的時間是寶貴的,程序員的時間更是),就直接采用URLRewriter.net的組件,實際上以前沒接觸過URL重寫經歷,大致得源程序看了幾遍就開始上路了。開始當然不求什么技術含量了,只要能重寫成功就已經感覺很OK了,然后才是在不斷的重寫過程中找出其中問題還有新思路,新發現。。。所以就有了這遍文章。

現在開始吧。這次針對的其實主要就是剛提到的日期模式的URL重寫.

http://blog.tyoo.net/Articles/2007/01/18/233030/joshualang.aspx 這就是要在這里實現的最終效果。


基礎: UrlRewriter.net組件(當然也可以自已寫), 了解正則表達式

參數:ArticleID  //文章編號 [ 類型:string    長度:14(like:yyyymmddhhmmss)//有意義且不會重復  ]

            Bloger   //博主用戶名[ 類型:string   字母開頭 ]

在URL重寫過程中遇到的一個問題就是在訪問不存在的目錄或文件時出現404錯誤。在MSDN上的這遍文檔提供的建議就是在程序目錄下建立必要的文件夾目錄及空的頁面,說麻煩的確是麻煩,數千的目錄需要建立。

既然不能隨便就訪問不存在的目錄文件,那我們不訪問這樣的目錄不就行了。就要訪問我們已經存在的文件(我的全部URL指向都是根目錄Blog下的一個Default.aspx頁面然后動態加載控件組生成不同的視圖功能頁面)當然這次要指向的還是這個頁面~/Default.aspx;

下面的任務就是傳遞參數,當然是URL傳值了。這就是重寫它的原因了。

主角又要出場了:正則表達式。

在這里用正則表達式真的是太帥了~ http://blog.tyoo.net/joshualang/Articles/2007/01/18/Default.aspx目錄你可能會生成如下這樣的URL重寫規則:

<RewriterRule>
           <LookFor>~/(w{6,16})/Articles/(d{4})/(d{2})/(d{2})/Default.aspx</LookFor>
           <SendTo>~/Default.aspx?Bloger=$1&amp;year=$2&amp;month=$3&amp;day=$4</SendTo>
</RewriterRule>
 

這樣寫出的規則在進行刪節時肯定是會因為訪問的頁面不存在而產生404錯誤。因為它會順著你的目錄標記一直往下找,要是再建目錄工程可就大了,再看看下邊的代碼:

<RewriterRule>
           <LookFor>~/(w{6,16})/Articles/(d{4})/(d{2})/(d{2})/(d{6})/Default.aspx</LookFor>
           <SendTo>~/Default.aspx?Bloger=$1&amp;year=$2&amp;month=$3&amp;day=$4&amp;time=$5</SendTo>
</RewriterRule>
 

這下多出了時間部分該沒人會選擇建目錄了。那就充分利用已經存在的文件來完成這個任務吧。

其實一說可能有很多人都能想到用文件名來代替目錄結構。想想看,是不是這樣。當然這還得對正則表達式有一定的了解。

好,來看看實現吧。

<RewriterRule>
    <LookFor>~/(w{5,16})/Articles/(d{4})//(d{2})//(d{2})//(d{6}).aspx</LookFor>
    <SendTo>~/Default.aspx?ArticleID=$2$3$4$5&amp;Bloger=$1</SendTo>
</RewriterRule>
 

大家很容易看出我這里用到了“/”對“/”進行了轉義,而且用在了文件名里邊現在的結構就是

http://blog.tyoo.net/joshualang/2007/01/18.aspx

很顯然我的ArticleID就是一個以年月日時分秒為基礎的字符串,因為這樣插入數據不用考慮重復還有意義,而在這里用時間也為查詢時方便。$2$3$4$5得到的14位組合就是我的ArticleID.通過發表日期,文章編號都可以很容易查出記錄。而最后一點好處就在進行刪節時表現的特為明顯。

現在來讓我們刪節時間部分:

<RewriterRule>
    <LookFor>~/(w{5,16})/Articles/(d{4})//(d{2})//(d{2}).aspx</LookFor>
    <SendTo>~/Default.aspx?ArticleID=$2$3$4&amp;Bloger=$1</SendTo>
</RewriterRule>
 

依次我們可以將URL刪節為這樣的模式:http://blog.tyoo.net/joshualang/Articles/2007.aspx甚至http://blog.tyoo.net/joshualang/Articles/Default.aspx

是不是很簡單。但你要注意一個問題了:什么事不是能夠就會實現的了,須要考慮的還有很多比如:

http://blog.tyoo.net/joshualang/Articles/2007.aspxhttp://blog.tyoo.net/joshualang/Articles/2007/.aspx有什么區別,做到上邊的規則后后者能否正常運行?不能

同樣:http://blog.tyoo.net/joshualang/Articles/2007/01/08/.aspx也是不行的。還需要定義其它應對規則來實現恰如其份的重寫效果。

好了,大致上效果已經出來了;這里是完整的規則代碼:

 

<!--author: Joshua Li  (joshuasco@126.comQQ:245965348-->
<!-- Rules for Blog Content Displayer -->
            <RewriterRule>
                <LookFor>~/([A-Za-z]w{5,16})/Default.aspx</LookFor>
                <SendTo>~/Default.aspx?Bloger=$1</SendTo>
            </RewriterRule>
            <!-- Rules for Article Lister -->
            <RewriterRule>
                <LookFor>~/Articles/(d{4})//(d{2})//(d{2})//(d{1,6})//([A-Za-z]w{5,16}).aspx</LookFor>
                <SendTo>~/Default.aspx?ArticleID=$1$2$3$4&amp;Bloger=$5</SendTo>
            </RewriterRule>
            <RewriterRule>
                <LookFor>~/Articles/(d{4})//(d{2})//(d{2})//(d{1,6})((//)?).aspx</LookFor>
                <SendTo>~/Default.aspx?ArticleID=$1$2$3$4</SendTo>
            </RewriterRule>
            <RewriterRule>
                <LookFor>~/Articles/(d{4})//(d{2})//(d{2})//([A-Za-z]w{5,16}).aspx</LookFor>
                <SendTo>~/Default.aspx?ArticleID=$1$2$3&amp;Bloger=$4</SendTo>
            </RewriterRule>
            <RewriterRule>
                <LookFor>~/Articles/(d{4})//(d{2})//(d{2})((//)?).aspx</LookFor>
                <SendTo>~/Default.aspx?ArticleID=$1$2$3</SendTo>
            </RewriterRule>
            <RewriterRule>
                <LookFor>~/Articles/(d{4})//(d{2})//([A-Za-z]w{5,16}).aspx</LookFor>
                <SendTo>~/Default.aspx?ArticleID=$1$2&amp;Bloger=$3</SendTo>
            </RewriterRule>
            <RewriterRule>
                <LookFor>~/Articles/(d{4})//(d{2})((//)?).aspx</LookFor>
                <SendTo>~/Default.aspx?ArticleID=$1$2</SendTo>
            </RewriterRule>
            <RewriterRule>
                <LookFor>~/Articles/(d{4})//([A-Za-z]w{5,16}).aspx</LookFor>
                <SendTo>~/Default.aspx?ArticleID=$1&amp;Bloger=$2</SendTo>
            </RewriterRule>
            <RewriterRule>
                <LookFor>~/Articles/(d{4})((//)?).aspx</LookFor>
                <SendTo>~/Default.aspx?ArticleID=$1</SendTo>
            </RewriterRule>
            <RewriterRule>
                <LookFor>~/Articles/([A-Za-z]w{5,16}).aspx</LookFor>
                <SendTo>~/Default.aspx?Bloger=$1</SendTo>
            </RewriterRule>
            <RewriterRule>
                <LookFor>~/Articles/Default.aspx</LookFor>
                <SendTo>~/Default.aspx?ArticleID=-1</SendTo>
            </RewriterRule>
說明:在這里為了訪止用戶誤刪節掉重要的.aspx擴展名,我將用戶名作為了文件的虛擬標識名稱。

最后得到的URL:  http://blog.tyoo.net/Articles/2007/01/18/015000/joshualang.aspx

同時將放在最后的最長為6位的時間設置為可刪節變長,就算丟了某些數字也能最方便的找到與該發表時間最接近的列表。

在去除用戶名后也不會影響到使用,還是通過前邊詳細的時間格式很快會得到與您需要的文章最批配的列表。如果用戶名完好則能通過刪節找到特定時間段對應作者的文章列表。

還要注意的是:用戶名的格式([A-Za-z]{6-16})和規則驗證的順序。

總結:
    通過規則的URL重寫過程后像實際存在此目錄一樣會具有嚴密的格式但顯得框架結構更方便更靈活,從而得到功能和用戶體驗上的重點提升
暫時到這里吧。有什么疑問歡迎回復加入討論。如果有更好的重寫方法很高興能通知下本人哦。
http://www.49028c.com/Joshualang/archive/2007/01/19/624302.html


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产精品欧美激情| 欧美精品在线观看| 疯狂做受xxxx欧美肥白少妇| 欧美成人激情视频免费观看| 日韩激情在线视频| 亚洲视频在线观看视频| 国产精品永久免费观看| 国产成人午夜视频网址| 亚洲高清一二三区| 欧美午夜片欧美片在线观看| 成人欧美一区二区三区在线| 国产精品对白刺激| 一本色道久久综合狠狠躁篇的优点| 欧美精品videofree1080p| 亚洲区中文字幕| 国产精品444| 国产欧美一区二区三区久久| 国产精品1区2区在线观看| 欧美性生交xxxxx久久久| 啊v视频在线一区二区三区| 国产欧美欧洲在线观看| 久久久精品日本| 精品视频在线播放免| 欧美在线国产精品| 日韩在线视频网站| 久久久久久中文字幕| 精品久久国产精品| 亚洲欧美日韩天堂一区二区| 久久亚洲综合国产精品99麻豆精品福利| 亚洲影院在线看| 亚洲国产私拍精品国模在线观看| 午夜精品久久久久久久99热浪潮| 综合久久五月天| 欧美在线日韩在线| 国产精品白嫩初高中害羞小美女| 久久精品国产一区二区电影| 欧美综合一区第一页| 97色在线观看| 成人久久一区二区三区| 中文字幕av一区中文字幕天堂| 日韩精品免费在线视频观看| 欧美黑人性生活视频| 久久精品免费播放| 国产视频精品免费播放| 亚洲第一精品夜夜躁人人爽| 深夜福利91大全| 最近2019年好看中文字幕视频| 国产欧美精品久久久| 国产精品视频一区二区三区四| 亚洲人在线观看| 日韩电影大片中文字幕| 亚洲一区中文字幕在线观看| 日韩高清电影免费观看完整版| 成人国产在线激情| 久久九九国产精品怡红院| 91在线网站视频| 成人两性免费视频| 国产精品久久久久久久久久小说| 欧美日韩亚洲精品一区二区三区| 国产欧美日韩丝袜精品一区| 国产精品ⅴa在线观看h| 91老司机在线| 久久久久久久av| 欧美大胆在线视频| 激情成人中文字幕| 久久精品国产亚洲| 国产精品视频一区二区三区四| 亚洲成人网在线| 亚洲成色999久久网站| 久久久久久久久亚洲| 亚洲男人天堂九九视频| 久久天天躁狠狠躁夜夜躁2014| 茄子视频成人在线| 欧美性猛交xxxx免费看久久久| 国产日韩中文字幕| 一夜七次郎国产精品亚洲| 91国内揄拍国内精品对白| 亚洲国产精品嫩草影院久久| 国产日韩欧美在线| 亚洲欧洲国产一区| 国产91精品高潮白浆喷水| 亚洲xxxx做受欧美| 91成人在线观看国产| 国产美女精品免费电影| 国产一区二区三区四区福利| 久久91亚洲精品中文字幕| 97在线视频免费播放| 久久久爽爽爽美女图片| 91精品久久久久久久久久久久久| 亚洲另类欧美自拍| 日韩精品免费视频| 国内伊人久久久久久网站视频| 精品视频一区在线视频| 91精品在线观看视频| 日韩av网址在线观看| 热re91久久精品国99热蜜臀| 欧美精品一区三区| 欧美肥臀大乳一区二区免费视频| 日韩在线视频网| 亚洲精品福利免费在线观看| 国产福利精品视频| 国产免费一区二区三区在线观看| 91在线免费看网站| 88xx成人精品| 亚洲国产精品久久久久久| 亚洲aa中文字幕| 亚洲精品中文字幕有码专区| 日韩精品视频三区| 国产在线精品一区免费香蕉| 在线观看91久久久久久| 久久久免费高清电视剧观看| 国产精品美女久久久久av超清| 国产精品一区二区性色av| 最近2019中文字幕mv免费看| 91亚洲精品久久久| 国产免费一区二区三区在线观看| 久久久免费高清电视剧观看| 一本大道久久加勒比香蕉| 日韩免费在线视频| www.99久久热国产日韩欧美.com| 欧美日韩亚洲系列| 高清一区二区三区日本久| 成人精品一区二区三区电影免费| 国产一区二区三区毛片| 久久久久久久爱| 久久色免费在线视频| 国产精品网站入口| 国产成人av在线播放| 久久夜色精品国产亚洲aⅴ| 国产精品久久中文| 欧美在线视频播放| 九九精品在线观看| 欧洲亚洲女同hd| 久久久国产一区二区三区| 国产精品亚发布| 日韩在线观看免费高清完整版| 91在线观看免费观看| 日韩免费在线电影| 91精品久久久久久| 欧美另类第一页| 成人欧美一区二区三区黑人| 国产精品吊钟奶在线| 久久久久久久网站| 日韩在线免费视频观看| 国产一区视频在线| 欧美精品www| 久久九九热免费视频| 久久免费高清视频| 人九九综合九九宗合| 精品久久中文字幕久久av| 日本精品免费观看| 亚洲人成欧美中文字幕| 91香蕉电影院| 日本久久精品视频| 国产成人精品一区二区| 97在线视频观看| 日韩有码在线视频| 国产精品自在线| 视频在线观看一区二区| 日韩视频在线一区| 久久精品99久久久香蕉| 日韩风俗一区 二区| 国产精品观看在线亚洲人成网| 欧美黄色三级网站|