国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

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

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://m.survivalescaperooms.com/Joshualang/archive/2007/01/19/624302.html


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 噶尔县| 岱山县| 广南县| 朝阳市| 孟连| 桃源县| 长子县| 丹巴县| 临沭县| 天柱县| 分宜县| 岑溪市| 伊吾县| 手游| 鹤峰县| 武宣县| 梁河县| 上杭县| 沅陵县| 武冈市| 舟曲县| 凉城县| 大兴区| 武功县| 阳谷县| 巴里| 应城市| 运城市| 临澧县| 兴宁市| 天峨县| 灵川县| 罗源县| 新蔡县| 凤山县| 浑源县| 益阳市| 桃园市| 长葛市| 都匀市| 云南省|