大家一定經(jīng)常在網(wǎng)絡上看到很多網(wǎng)站的地址后綴都是用XX.HTML或者XX.ASPX等類似靜態(tài)文件的標示來操作的吧,那么大家有懷疑過他真的是一個一個的靜態(tài)生成的文件么,靜態(tài)文件的生成的優(yōu)缺有好有壞,對于訪問量很大的網(wǎng)站,利用靜態(tài)文件可提高服務器的運行穩(wěn)定和速度,壞處就是生成列表的時候會因為增加一條記錄從而需要所有相關(guān)的列表進行重構(gòu),當然不排除有的公司已經(jīng)攻克的這個問題,但對于大眾程序員來說,他依舊是個問題,而且生成的化對于中小型網(wǎng)站也不一定會比動態(tài)的號,因為管理比較麻煩。
結(jié)構(gòu)以上事實,然后偽靜態(tài)技術(shù)產(chǎn)生了,規(guī)范的說就是URL重寫技術(shù),他對于ASPX格式支持最好,當然也可以重寫HTML格式的文件,但這需要IIS的設(shè)置,相對比來說,ASPX格式的更方便,本站就是采用了該URL重寫技術(shù),這個技術(shù)優(yōu)點顯而易見:方便搜索引擎收錄,方便查看,等等。那么接下來我們來看看如何配置他吧
首先、我們要用到URL重寫組件:URLRewriter.rar
其次、需要在WEB.CONFIG里面進行些設(shè)置:
1、在Web.Config的<system.web>和</system.web>添加以下節(jié)點:
<httpHandlers> <add verb="*" path="*.aspx" type="URLRewriter.RewriterFactoryHandler, URLRewriter" /> <add verb="*" path="*.html" type="URLRewriter.RewriterFactoryHandler, URLRewriter" /></httpHandlers>2、在Web.Config的<configuration>和</configuration>添加以下節(jié)點:
<configSections> <section name="RewriterConfig" type="URLRewriter.Config.RewriterConfigSerializerSectionHandler, URLRewriter" /> </configSections> <RewriterConfig> <Rules> <RewriterRule> <LookFor>~/d(/d+)/.html</LookFor> <SendTo>~/Default.aspx?MyID=$1</SendTo> </RewriterRule> </Rules> </RewriterConfig>設(shè)置完以上兩個步驟,就基本可以運行了,其中<RewriterRule/>標簽里面就是重寫的一個模塊,<LookFor/>里面的是重寫后的地址,而<SendTo/>則是原地址。
3、配置IIS解析.html文件IIS配置:網(wǎng)站->屬性->虛擬目錄->配置(G)...->映射->通配符應用程序映射->添加可執(zhí)行文件:c:/windows/microsoft.net/framework/v2.0.50727/aspnet_isapi.dll擴展名為:.html
確認文件是否存在:不選.
4、以上配置好之后就可以通過以下方式來訪問了
例如用戶輸入 hostname/d11.html,服務器會把他重寫為http://hostname/default.aspx?id=11。換句話說用戶輸入http://hostname/d11.html,實際訪問的是http://hostname/default.aspx?id=11
5、分頁必須引用以下方法
ActionlessForm.dll
namespaceActionlessForm{publicclassForm:System.Web.UI.HtmlControls.HtmlForm{創(chuàng)建此類并對其進行編譯之后,要在 ASP.NET Web 應用程序中使用它,應首先將其添加到 Web 應用程序的 References 文件夾中。然后,要 使用它來代替 HtmlForm 類,做法是在 ASP.NET 網(wǎng)頁的頂部添加以下內(nèi)容:<%@ Register TagPrefix="skm" Namespace="ActionlessForm" Assembly="ActionlessForm" %> 然后,將 <form runat="server">(如果有)替換為: <skm:Form id="Form1" method="post" runat="server"> 并將右邊的 </form> 標記替換為:
</skm:Form>
成功!虛擬主機在網(wǎng)上看到,很多朋友在asp.net中做urlrewrite,用的是HttpHandle+Server.Transfer的方法。其實這種方法是錯誤的。
第一,HttpHandle是實現(xiàn)不了urlrewrite的;
第二Server.Transfer是標準的重定向,根本不是urlrewrite。
其實,實現(xiàn)urlrewrite不用自己HttpHandle,也不用自己實現(xiàn)HttpModule,用幾行代碼就可以輕松實現(xiàn)。我這里介紹的是在虛擬主機上,虛擬主機不同于自己的服務器,你是沒有權(quán)限去修改iis,也沒有權(quán)限去安裝iis rewrite之類的iis插件。但是我們?nèi)匀豢梢暂p松完成需要的功能。具體做法如下:打開global.asax.cs,定位到protected void application_BeginRequest(Object sender, EventArgs e)。從方法名我想也能猜到它是做什么的。輸入如下代碼:
protectedvoidApplication_BeginRequest(Objectsender,EventArgse){stringoldUrl=HttpContext.Current.Request.RawUrl;stringpattern=@"^(.+)default/(/d+)/.aspx(/?.*)*$";stringreplace="$1default.aspx?id=$2";if(Regex.IsMatch(oldUrl,pattern,RegexOptions.IgnoreCase|RegexOptions.Compiled)){stringnewUrl=Regex.Replace(oldUrl,pattern,replace,RegexOptions.Compiled|RegexOptions.IgnoreCase);this.Context.RewritePath(newUrl);}}有了上邊這段代碼,我訪問一個類似:.../default/123.aspx 的網(wǎng)址,當然這個網(wǎng)址在我的電腦上不存在,它就會被定向到:.../default.aspx?id=123。
當然,利用功能強大的正則表達式,你可以任意按照自己的需要來重寫url,這一切都是在服務器端默默的進行,在客戶端是不會有任何察覺的。由于是在虛擬主機上,我們只能重定向.aspx文件,如果是自己的服務器,只要把后綴名在iis中注冊一下,就可以實現(xiàn)任意后綴名的處理。比如你可以注冊一個*.myweb這樣的類型,這樣別人訪問default/456.myweb時,你可以把它重定向到default.aspx?id=456。總之一句話,只要你能想到,.net就可以幫你實現(xiàn),并且這一切不需要多少的代碼。
新聞熱點
疑難解答