在看《ASP.NET 2.0編程珠璣》這本書時,我瞭解到了URL Rewrite。
本書中的樣本是通過修改Web.config去達到URL Rewrite的目的,通過自己上網尋找,可以實現這個功能的組件和方法還是很多的。由於時間原因,只學習了兩種。一種是ASP.NET 2.0編程珠璣書中的,一種是通過MS的URLRewriter來實現的。
1,
在<system.web></system.web>中添加配置節點
<system.web>
<urlMappings enabled="true">
<add url="~/2006"
mappedUrl="~/Chapter1/YearView.aspx?year=2006"/>
<add url="~/2005"
mappedUrl="~/Chapter1/YearView.aspx?year=2005"/>
<add url="~/2006/01"
mappedUrl="~/Chapter1/MonthView.aspx?year=2006&month=01"/>
<add url="~/2006/02"
mappedUrl="~/Chapter1/MonthView.aspx?year=2006&month=02"/>
<add url="~/2005/01"
mappedUrl="~/Chapter1/MonthView.aspx?year=2005&month=01"/>
<add url="~/2005/02"
mappedUrl="~/Chapter1/MonthView.aspx?year=2005&month=02"/>
</urlMappings>
</system.web>
然後,前台的用戶端就可以添加類似的超連結
<asp:HyperLink ID="HyperLink1" NavigateUrl="~/2005" runat="server">2005</asp:HyperLink>
<asp:HyperLink ID="HyperLink1" NavigateUrl="~/2005" runat="server">2005</asp:HyperLink>
<asp:HyperLink ID="HyperLink1" runat="server" NavigateUrl="~/YEAR/01">01</asp:HyperLink><br />
<asp:HyperLink ID="HyperLink2" runat="server" NavigateUrl="~/YEAR/02">02</asp:HyperLink><br />
<asp:HyperLink ID="HyperLink3" runat="server" NavigateUrl="~/YEAR/03">03</asp:HyperLink><br />
<asp:HyperLink ID="HyperLink4" runat="server" NavigateUrl="~/YEAR/04">04</asp:HyperLink><br />
<asp:HyperLink ID="HyperLink5" runat="server" NavigateUrl="~/YEAR/05">05</asp:HyperLink><br />
<asp:HyperLink ID="HyperLink6" runat="server" NavigateUrl="~/YEAR/06">06</asp:HyperLink><br />
<asp:HyperLink ID="HyperLink7" runat="server" NavigateUrl="~/YEAR/07">07</asp:HyperLink><br />
<asp:HyperLink ID="HyperLink8" runat="server" NavigateUrl="~/YEAR/08">08</asp:HyperLink><br />
<asp:HyperLink ID="HyperLink9" runat="server" NavigateUrl="~/YEAR/09">09</asp:HyperLink><br />
<asp:HyperLink ID="HyperLink10" runat="server" NavigateUrl="~/YEAR/10">10</asp:HyperLink><br />
<asp:HyperLink ID="HyperLink11" runat="server" NavigateUrl="~/YEAR/11">11</asp:HyperLink><br />
<asp:HyperLink ID="HyperLink12" runat="server" NavigateUrl="~/YEAR/12">12</asp:HyperLink><br />
當點擊超連結的時候,地址欄只會顯示http://localhost:2537/WebDemo/2005/01,實際上是串連到了http://localhost:2537/WebDemo、Chapter1/MonthView.aspx?year=2006&month=01
2,
首先:現在MSDNURLRewriting,安裝完成後,在安裝目錄下找到ActionlessForm ,URLRewriter。分別找的他們bin目錄下的ActionlessForm.dll 和 URLRewriter.dll。然後添加到你的項目中。
第二:修改設定檔
在<configuration></configuration>中添加如下節點
<configSections>
<section name="RewriterConfig" type="URLRewriter.Config.RewriterConfigSerializerSectionHandler,URLRewriter"/>
</configSections>
<RewriterConfig>
<Rules>
<RewriterRule>
<LookFor>~/(\d{4})/(\d{2})/(\d{2})</LookFor>
<SendTo>~/GuanTestURLRewrit/ShowBlogContent.aspx?year=$1&month=$2&day=$3</SendTo>
</RewriterRule>
<RewriterRule>
<LookFor>~/(\d{4})/(\d{2})/(\d{2})/Default\.html</LookFor>
<SendTo>~/GuanTestURLRewrit/ShowBlogContent.aspx?year=$1&month=$2&day=$3</SendTo>
</RewriterRule>
<RewriterRule>
<LookFor>~/(\d{4})/(\d{2})/Default\.html</LookFor>
<SendTo><![CDATA[~/GuanTestURLRewrit/ShowBlogContent.aspx?year=$1&month=$2]]></SendTo>
</RewriterRule>
<RewriterRule>
<LookFor>~/(\d{4})/Default\.html</LookFor>
<SendTo>~/GuanTestURLRewrit/ShowBlogContent.aspx?year=$1</SendTo>
</RewriterRule>
</Rules>
</RewriterConfig>
在<system.web></system.web>中添加下面的節點
<httpModules>
<add type="URLRewriter.ModuleRewriter,URLRewriter" name="ModuleRewriter"/>
</httpModules>
現在設定檔基本修改完成。下面是用戶端代碼:
<asp:HyperLink ID="hyYear" NavigateUrl="2003/Default.html" runat="server" Width="110px">Year</asp:HyperLink><br />
<asp:HyperLink ID="hyYearAndMonth" NavigateUrl="2003/12/Default.html" runat="server" Width="110px">Year and Month</asp:HyperLink><br />
<asp:HyperLink ID="hyYearMonthAndDay" NavigateUrl="2003/12/21/Default.html" runat="server" Width="247px">Year Month and Day</asp:HyperLink><br />
這樣當我們點擊按鈕的時候,就會通過設定檔的Regex,去找到真正的路徑。
例如:我們點擊的是http://localhost:12003/Demo/2003/Default.html實際上的路徑為:http://localhost:12003/Demo/GuanTestURLRewrit/ShowBlogContent.aspx?year=2003
相對而言,後者比較靈活,可以應用Regex。
作者:冰碟
出處:http://www.cnblogs.com/icebutterfly/
著作權:本文著作權歸作者和部落格園共有
轉載:歡迎轉載,為了儲存作者的創作熱情,請按要求【轉載】,謝謝
要求:未經作者同意,必須保留此段聲明;必須在文章中給出原文串連;否則必究法律責任