Ionic’s Isapi Rewrite Filter(IIRF) – 強大免費的URL Rewriter元件(基本安裝使用)

最近因為工作需要
並且為了加強被搜索引擎的搜索到的機率
所以打算把一些帶參數的網頁偽裝成靜態網頁

之前曾經用過一顆ISAPI_Rewrite的元件
這顆是要付費的>”< 不過它有Lite免費版可以使用 不過缺點是免費版只支援一個Wbe Site的URL Rewriter 用了一陣子之後抱著碰碰運氣的心態在Google上看 結果筆者找到了這顆Ionic’s Isapi Rewrite Filter 為了方便,下面的文章簡稱為IIRF

IIRF是一顆免費元件
也是作者為了找不到好用的元件苦惱而寫出來的
功能挺強大的
而且還是Open Source
換句話說
如果沒有什麼意外的話
是不可能會收費的
而且如果自己有需要
還可以參照原始碼去理解寫出自己專屬的URL Rewriter元件
廢話不再多說
我們直接來實戰這顆元件吧

IIRF官網
http://cheeso.members.winisp.net/IIRF.aspx

下載位置(版本編號:v1.2.15 R3)
http://www.codeplex.com/IIRF/Release/ProjectReleases.aspx?ReleaseId=13946

請選擇下載IonicIsapiRewriter-1.2.15-bin.zip

解壓縮後裡面會有
bin(測試工具)
ExampleIni(基本範例)
lib(元件放在裡面)
tests(各種測試用的範例)
這四個資料夾

筆者在此以Windows Server 2003為平台
在IIS 6上面實做
基本上有兩種做法
一種是在IIS上面設定ISAPI加入IIRF
讓全部網站共用一個設定
一種是在個別的Web Site的ISAPI中加入IIRF
要用哪種方式端看個人需求跟喜好
基本上兩種做法大同小異
不過筆者個人因為需求所以選擇的是後者
讓此功能比較有擴充性跟分類需求

1.建立一個資料夾專門存放各個Site的設定
筆者在C:\裡面新增了一個IIRF的資料夾
然後用iirf.markart.idv.tw這個網站來做設定
這個網站主要是筆者個人的Discuz論壇
所以我又在IIRF的資料夾新建了一個iirf.markart.idv.tw的資料夾
所以路徑會是C:\IIRF\iirf.markart.idv.tw\

2.複製檔案到iirf.markart.idv.tw中
然後把lib資料夾裡面的IsapiRewrite4.dll跟IsapiRewrite4.pdb丟到此資料夾中
並且建立一個IsapiRewrite4.ini的空白檔

3.編輯IsapiRewrite4.ini
把IsapiRewrite4.ini打開貼上下面的資料

#====================設定檔開始====================
# IsapiRewrite4.ini
#
# ini file for the ISAPI rewriter.
#
# 這是有關於IIRF的靜態化頁面轉址測試
#
# 2008/11/13 21:06
#
RewriteRule ^/([0-9]+).html$  /?$1 [I,L]
RewriteRule ^/index-([0-9]+).html$  /index.asp?$1 [I,L]
#====================設定檔結束====================

然後存檔

4.從iirf.markart.idv.tw站台中加入IIRF
打開IIS管理員
在iirf.markart.idv.tw這個站台上按滑鼠右鍵選擇內容
點選標籤到ISAPI篩選器
新增一組設定
篩選器名稱:IIRF
執行檔:C:\IIRF\iirf.markart.idv.tw\IsapiRewrite4.dll
然後點選確定
即可新增完畢
*請注意~
在IIS6中必須在網頁延伸服務中把”所有未知的ISAPI擴充程式”設定為已允許
5.測試效果
打開瀏覽器
在網址中輸入
http://iirf.markart.idv.tw/123.html
http://iirf.markart.idv.tw/index-123.html
其結果都會顯示為
> 您輸入的數字是 123
接下來我們來討論一下設定的內容
基本上IIRF是透過RegExp規則運算式來做轉換的
如果有碰過RegExp的話會比較能快速的上手URL Rewriter
如果沒有也沒關係
筆者在此提供MSDN的一些基礎文件提供參閱
http://msdn.microsoft.com/zh-tw/library/28hw3sce(VS.80).aspx
另外有兩個小工具可以測試RegExp的正確性
一個是筆者自己寫的小工具,專門單純用來檢查RegExp規則跟書入範例是否匹配
http://www.blueshop.com.tw/download/show.asp?pgmcde=PGM20081030113246NT9
一個是Helicon Tech公司開發的ISAPI_Rewrite Lite中內附的測試程式
http://www.blueshop.com.tw/download/show.asp?pgmcde=PGM20081114163300KOD
另外講解一下
比較有用到的幾個參數設定
其中轉換的命令格式如下
RewriteRule []
是我們要輸入的RegExp規則
是符合規則後要轉換的網址,如果有取值的地方可用$1、$2順序輸入在要帶參數的地方
其中最重要的就是下面這個
這是匹配的模式,此乃可選擇性輸入的地方
可輸入的參數有以下這些
(這些參數是筆者從網路上找的,因為我的英文實在是弱的可以,若有錯誤歡迎指正)
(所以在此這部分是直接轉貼網路上找到的轉貼文章,若有原作者有問題的話也歡迎來信)
R = Redirect(URL跳轉到網址)
NF = Not found(返回404錯誤給用戶,但是實際上文件還是存在的,只是不讓用戶讀取)
L = Last test if match(如果已經匹配成功,將不再繼續匹配下去)
F = Forbidden(跟NF相似)
I = Do case-insensitive matching
U = Store original url in server Variable HTTP_X_REWRITE_URL(保存原始的url到HTTP_X_REWRITE_URL伺服器變數中。)
[R] or [R=code]
就像跟我們在ASP.NET使用的Redirect方法一樣,重新改變瀏覽器的方向,跳轉到新的指定的URL中。
[R=code]允許我們指定特定的HTTP狀態返回碼。只能介於301到399。如果超出這個範圍。默認會是使用302狀態。
RewriteRule ^/goto.aspx?r=(.*)$ $1 [R]
源:http://xxx/goto.aspx?r=http://www.google.com/
目標:http://www.google.com
[L]
上面已經簡單介紹過。不在說明
[NF]
上面已經簡單介紹過。它還可以跟RewriteCond一起配合,來實現自定義的404錯誤請求。
特別要注意,你所要匹配的文件必須存在,替換的字元串不允許是存在文件名
RewriteRule ^/1008.aspx$ /1.aspx [NF]
1008.aspx文件需要存在,1.aspx不存在,否則無法正常達到我們的結果。
[F]
不在說明。
[I]
模糊匹配
[U]
保存原始的url到HTTP_X_REWRITE_URL伺服器變數中。
在ASP.NET你可以用Request.ServerVariables[“HTTP_X_REWRITE_URL”]取得原始值。
其他設定可以參照這份文件
http://www.cnblogs.com/cnzc/archive/2007/03/02/662217.html
如果有興趣的話也可以參閱此文件玩玩二級域名網址重寫的功能
http://zhangsichu.com/blogview.asp?Content_Id=82
所以說如果還沒有安裝IIS7
或者是開發的不是ASP.Net卻又想用URL Rewriter的時候
就來用看看吧^^

最近因為工作需要並且為了加強被搜索引擎的搜索到的機率所以打算把一些帶參數的網頁偽裝成靜態網頁
之前曾經用過一顆ISAPI_Rewrite的元件這顆是要付費的>”<不過它有Lite免費版可以使用不過缺點是免費版只支援一個Wbe Site的URL Rewriter用了一陣子之後抱著碰碰運氣的心態在Google上看 結果筆者找到了這顆Ionic’s Isapi Rewrite Filter為了方便,下面的文章簡稱為IIRF IIRF是一顆免費元件也是作者為了找不到好用的元件苦惱而寫出來的功能挺強大的而且還是Open Source 換句話說如果沒有什麼意外的話是不可能會收費的 而且如果自己有需要還可以參照原始碼去理解寫出自己專屬的URL Rewriter元件 廢話不再多說我們直接來實戰這顆元件吧 IIRF官網http://cheeso.members.winisp.net/IIRF.aspx 下載位置(版本編號:v1.2.15 R3)http://www.codeplex.com/IIRF/Release/ProjectReleases.aspx?ReleaseId=13946 請選擇下載IonicIsapiRewriter-1.2.15-bin.zip 解壓縮後裡面會有bin(測試工具)ExampleIni(基本範例)lib(元件放在裡面)tests(各種測試用的範例)這四個資料夾 筆者在此以Windows Server 2003為平台在IIS 6上面實做基本上有兩種做法 一種是在IIS上面設定ISAPI加入IIRF讓全部網站共用一個設定 一種是在個別的Web Site的ISAPI中加入IIRF要用哪種方式端看個人需求跟喜好 基本上兩種做法大同小異不過筆者個人因為需求所以選擇的是後者讓此功能比較有擴充性跟分類需求 1.建立一個資料夾專門存放各個Site的設定筆者在C:\裡面新增了一個IIRF的資料夾然後用iirf.markart.idv.tw這個網站來做設定這個網站主要是筆者個人的Discuz論壇所以我又在IIRF的資料夾新建了一個iirf.markart.idv.tw的資料夾所以路徑會是C:\IIRF\iirf.markart.idv.tw\ 2.複製檔案到iirf.markart.idv.tw中然後把lib資料夾裡面的IsapiRewrite4.dll跟IsapiRewrite4.pdb丟到此資料夾中並且建立一個IsapiRewrite4.ini的空白檔 3.編輯IsapiRewrite4.ini把IsapiRewrite4.ini打開貼上下面的資料

#====================設定檔開始====================
# IsapiRewrite4.ini#
# ini file for the ISAPI rewriter. # 
# 這是有關於IIRF的靜態化頁面轉址測試#
# 2008/11/13 21:06#
RewriteRule ^/([0-9]+).html$  /?$1 [I,L]RewriteRule ^/index-([0-9]+).html$  /index.asp?$1 [I,L]
#====================設定檔結束====================

然後存檔

4.從iirf.markart.idv.tw站台中加入IIRF打開IIS管理員在iirf.markart.idv.tw這個站台上按滑鼠右鍵選擇內容點選標籤到ISAPI篩選器新增一組設定篩選器名稱:IIRF執行檔:C:\IIRF\iirf.markart.idv.tw\IsapiRewrite4.dll然後點選確定即可新增完畢
*請注意~在IIS6中必須在網頁延伸服務中把”所有未知的ISAPI擴充程式”設定為已允許

5.測試效果打開瀏覽器在網址中輸入http://iirf.markart.idv.tw/123.htmlhttp://iirf.markart.idv.tw/index-123.html其結果都會顯示為> 您輸入的數字是 123

接下來我們來討論一下設定的內容基本上IIRF是透過RegExp規則運算式來做轉換的如果有碰過RegExp的話會比較能快速的上手URL Rewriter如果沒有也沒關係筆者在此提供MSDN的一些基礎文件提供參閱http://msdn.microsoft.com/zh-tw/library/28hw3sce(VS.80).aspx
另外有兩個小工具可以測試RegExp的正確性一個是筆者自己寫的小工具,專門單純用來檢查RegExp規則跟書入範例是否匹配http://www.blueshop.com.tw/download/show.asp?pgmcde=PGM20081030113246NT9
一個是Helicon Tech公司開發的ISAPI_Rewrite Lite中內附的測試程式http://www.blueshop.com.tw/download/show.asp?pgmcde=PGM20081114163300KOD

另外講解一下比較有用到的幾個參數設定其中轉換的命令格式如下RewriteRule []是我們要輸入的RegExp規則是符合規則後要轉換的網址,如果有取值的地方可用$1、$2順序輸入在要帶參數的地方
其中最重要的就是下面這個這是匹配的模式,此乃可選擇性輸入的地方可輸入的參數有以下這些(這些參數是筆者從網路上找的,因為我的英文實在是弱的可以,若有錯誤歡迎指正)(所以在此這部分是直接轉貼網路上找到的轉貼文章,若有原作者有問題的話也歡迎來信)R = Redirect(URL跳轉到網址)NF = Not found(返回404錯誤給用戶,但是實際上文件還是存在的,只是不讓用戶讀取)L = Last test if match(如果已經匹配成功,將不再繼續匹配下去)F = Forbidden(跟NF相似)I = Do case-insensitive matchingU = Store original url in server Variable HTTP_X_REWRITE_URL(保存原始的url到HTTP_X_REWRITE_URL伺服器變數中。)
[R] or [R=code]就像跟我們在ASP.NET使用的Redirect方法一樣,重新改變瀏覽器的方向,跳轉到新的指定的URL中。[R=code]允許我們指定特定的HTTP狀態返回碼。只能介於301到399。如果超出這個範圍。默認會是使用302狀態。RewriteRule ^/goto.aspx?r=(.*)$ $1 [R]源:http://xxx/goto.aspx?r=http://www.google.com/目標:http://www.google.com
[L]上面已經簡單介紹過。不在說明
[NF] 上面已經簡單介紹過。它還可以跟RewriteCond一起配合,來實現自定義的404錯誤請求。特別要注意,你所要匹配的文件必須存在,替換的字元串不允許是存在文件名RewriteRule ^/1008.aspx$ /1.aspx [NF]1008.aspx文件需要存在,1.aspx不存在,否則無法正常達到我們的結果。
[F]不在說明。
[I]模糊匹配
[U]保存原始的url到HTTP_X_REWRITE_URL伺服器變數中。在ASP.NET你可以用Request.ServerVariables[“HTTP_X_REWRITE_URL”]取得原始值。
其他設定可以參照這份文件http://www.cnblogs.com/cnzc/archive/2007/03/02/662217.html
如果有興趣的話也可以參閱此文件玩玩二級域名網址重寫的功能http://zhangsichu.com/blogview.asp?Content_Id=82

所以說如果還沒有安裝IIS7或者是開發的不是ASP.Net卻又想用URL Rewriter的時候就來用看看吧^^

Posted in IIS

Leave a Reply

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

You may use these HTML tags and attributes:

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>