由於對生成靜態頁的功能需求不是非常緊迫,所以一直沒研究這方面的技術。但是昨天遇到的一個問題逼着我去研究它。
公司一個程序員在網上找了個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"-->然後把檢查文件是否存在的勾去掉這樣就可以了,如果遇到“確定”按鈕失效,可以用鍵盤事件編輯路徑即可解決。