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

首頁 > 學院 > 開發(fā)設(shè)計 > 正文

利用URLRewriter.dll 實現(xiàn)ASP.NET實現(xiàn)偽靜態(tài)

2019-11-17 01:37:58
字體:
供稿:網(wǎng)友

利用URLRewriter.dll 實現(xiàn)asp.net實現(xiàn)偽靜態(tài)

大家一定經(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),并且這一切不需要多少的代碼。

  • URLRewriter.rar(3.8 KB)

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 玉环县| 绍兴县| 祁东县| 错那县| 梓潼县| 确山县| 会宁县| 石景山区| 龙岩市| 博湖县| 武隆县| 扎兰屯市| 松溪县| 扶绥县| 五河县| 军事| 九江县| 句容市| 东乡| 广宁县| 玉林市| 丹寨县| 简阳市| 蛟河市| 黄浦区| 吴忠市| 永善县| 分宜县| 杂多县| 仁布县| 饶平县| 许昌市| 丰宁| 喜德县| 阿拉善盟| 庄浪县| 同江市| 阿鲁科尔沁旗| 云和县| 富锦市| 太仆寺旗|