利用Mircosoft URLRewriter.dll實現頁面僞靜態

由於對生成靜態頁的功能需求不是非常緊迫,所以一直沒研究這方面的技術。但是昨天遇到的一個問題逼着我去研究它。

公司一個程序員在網上找了個B2B的網站源碼(包含生成靜態功能),在本地測試成功,但是傳到服務器上就只能訪問首頁了。所有重寫URL僞靜態頁面都無法訪問。

我第一個想到的是IIS中的“確定文件是否存在”,但是沒效果。在網上查了半天也沒有合適的解決方案。

這時我開始懷疑源碼作者是不是在覈心功能中加了localhost限制,但是源碼翻了半天沒找到僞靜態的代碼,只是在bin中找到了個urlrewriter.dll的動態鏈接庫。google搜了一下才恍然大悟,我也這才知道原來.net重寫URL這麼方便!

以下是轉來的一篇關於microsoft urlrewriter使用方法的文章:

 

一,獲得Mircosoft URLRewriter.dll:
獲得Mircosoft URLRewriter.dll可以到http://www.microsoft.com/china/msdn/library/webservices/asp.net/URLRewriting.mspx?mfr=true
這裏,選擇[下載本文的源代碼],下載完畢後,導入工程,我這裏沒有對該工程做任何修改,保留了原來的重寫方式,然後直接在VS2005裏面生成.dll文件就可以了。
二,使用該dll文件:
添加引用,搞定。
三,頁面方面的設計,這裏不在贅述了,我會放一個下載包,有興趣的朋友下載來看看吧,代碼寫的比較亂。
四,web.config的配置
這部是非常關鍵的,也是靜態化能否成功的關鍵。

view plaincopy to clipboardprint?
01.<?xml version="1.0"?> 
02.<configuration> 
03.  <configSections> 
04.    <section name="RewriterConfig" type="URLRewriter.Config.RewriterConfigSerializerSectionHandler, URLRewriter" /> 
05.  </configSections> 
06. 
07.  <RewriterConfig> 
08.        <Rules> 
09.            <RewriterRule> 
10.                <LookFor>~/web/new/type/(.[0-9]*)\.html</LookFor> 
11.        <SendTo>~/web/new.aspx?id=$1</SendTo> 
12.            </RewriterRule> 
13.      <RewriterRule> 
14.        <LookFor>~/web/index.html</LookFor> 
15.        <SendTo>~/web/index.aspx</SendTo> 
16.      </RewriterRule> 
17.        </Rules> 
18.    </RewriterConfig> 
19.    <system.web> 
20.    <httpHandlers> 
21.      <add verb="*" path="*.aspx" type="URLRewriter.RewriterFactoryHandler, URLRewriter" /> 
22.      <add verb="*" path="*.html" type="URLRewriter.RewriterFactoryHandler, URLRewriter" /> 
23.    </httpHandlers> 
24.        <compilation debug="true"/></system.web> 
25.</configuration> 
<?xml version="1.0"?>
<configuration>
  <configSections>
    <section name="RewriterConfig" type="URLRewriter.Config.RewriterConfigSerializerSectionHandler, URLRewriter" />
  </configSections>

  <RewriterConfig>
        <Rules>
            <RewriterRule>
                <LookFor>~/web/new/type/(.[0-9]*)\.html</LookFor>
        <SendTo>~/web/new.aspx?id=$1</SendTo>
            </RewriterRule>
      <RewriterRule>
        <LookFor>~/web/index.html</LookFor>
        <SendTo>~/web/index.aspx</SendTo>
      </RewriterRule>
        </Rules>
    </RewriterConfig>
    <system.web>
    <httpHandlers>
      <add verb="*" path="*.aspx" type="URLRewriter.RewriterFactoryHandler, URLRewriter" />
      <add verb="*" path="*.html" type="URLRewriter.RewriterFactoryHandler, URLRewriter" />
    </httpHandlers>
        <compilation debug="true"/></system.web>
</configuration>
 

這裏簡單介紹一下:

view plaincopy to clipboardprint?
01.<RewriterConfig> 
02.   <Rules> 
03.   <RewriterRule> 
04.      <LookFor>要查找的模式</LookFor> 
05.      <SendTo>要用來替換模式的字符串</SendTo> 
06.   </RewriterRule> 
07.   <RewriterRule> 
08.      <LookFor>要查找的模式</LookFor> 
09.      <SendTo>要用來替換模式的字符串</SendTo> 
10.   </RewriterRule> 
11.   </Rules> 
12.</RewriterConfig> 
<RewriterConfig>
   <Rules>
   <RewriterRule>
      <LookFor>要查找的模式</LookFor>
      <SendTo>要用來替換模式的字符串</SendTo>
   </RewriterRule>
   <RewriterRule>
      <LookFor>要查找的模式</LookFor>
      <SendTo>要用來替換模式的字符串</SendTo>
   </RewriterRule>
   </Rules>
</RewriterConfig>
 

httpHandlers的設置主要是配合IIS將請求重新定義處理,這裏也比較關鍵,如果不存在合理的httpHandlers,那麼,訪問肯定會失敗的。

關於正則表達式,可以到百度裏搜索:"常用正則表達式",會有很多。

五.配置IIS解析.html文件
右鍵點我的電腦-->管理-->展開'服務和應用程序'-->internet信息服務-->找到你共享的目錄-->右鍵點擊屬性 -->點擊'配置'-->映射下面 -->找到.aspx的可執行文件路徑 複製路徑-->粘貼路徑-->擴展名爲".html"-->然後把檢查文件是否存在的勾去掉這樣就可以了,如果遇到“確定”按鈕失效,可以用鍵盤事件編輯路徑即可解決。

本文實例下載:http://www.cnblogs.com/Files/zhangyi85/StaticWeb.rar

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章