正 文:
這2天,一直在找ISAPI_Rewrite的破解版本,用了2.9版本的,用了3.1的破解版本的,結果全是掛羊頭賣狗肉,都不是真正破解的,只能通過通用檔案httpd.conf來配置,但這會影響伺服器上的其他網站。SO飄易經過一陣尋覓,終於找到了代替ISAPI_Rewrite的工具:IIRF 。
IIRF是Ionic出品的ISAPI Rewriting Filter,專門為IIS服務的URL重寫外掛程式,完全開源,完全免費。拋棄ISAPI_Rewrite的99美元費用吧。真正可用,這下IIS下的所有的偽靜態、次層網域泛解析全部搞定。
首先,到官方網站 http://iirf.codeplex.com/ 下載最新版本的 IIRF,飄易看到的最新的版本是 IonicIsapiRewriter-2.1.1.23-Release-Win32-bin.zip 。
一、安裝方法:
1、把 bin 目錄下的檔案全部拷貝到 D:\rewrite ,目錄你可以自訂。
2、如果你建立一個伺服器全域範圍的設定檔案(IirfGlobal.ini),你必須把它與(IIRF.dll)檔案在同一目錄中。 該URL Rewrite篩選器將尋找其在該檔案中的全域設定檔案。
3、對(IIRF.dll)檔案賦予 IIS_WPG使用者組“讀取”、“讀取與運行”、“寫入”許可權。
4、 開啟Internet資訊服務管理器。
右鍵點擊IIS管理器左欄“網站” 》“屬性”,彈出“網站屬性”選項卡,選擇“ISAPI篩選器”,如添加IIRF。
5、重啟IIS
6、右鍵點擊IIS管理器左欄“網站” 》“屬性”,彈出“網站屬性”選項卡,選擇“ISAPI篩選器”,查看“IIRF”載入是否成功。若是綠色向上箭頭,則表示載入成功。(提示,IIS重啟後,人工訪問一下該網站,不然無法觸發,也就載入不成功)
二、規則檔案格式基本和Apache的 mod_rewrite、ISAPI Rewrite一樣
IIRF是參照Apache的 mod_rewrite 模組改寫而來,所以大部分規則和mod_rewrite一樣。略有區別,部分區別如下:
IIRF不支援這些修飾符 [C]、[co]、[E]、[N]、[NE]、[NI]、[NS]、[PT]、[S]、[T]
支援[I](作為[NC]的別名)
規則檔案可隨時修改,隨時生效!
三、日誌設定
在IIRF中日誌值可以設定為0-5,在規則檔案的開頭部分有兩行設定日誌類型:
RewriteLog C:\Rewrite\supesite\iirfLog.out (注意要寫清楚路徑,各網站不同)
RewriteLogLevel 0 (0為不記錄,3為一般測試,5為處理故障)
日誌的代價高昂,同時不會自動刪除檔案,日誌類型一定要設成0,除非用於檢查才能修改為其他值,檢查完後一定要改為0,否則記錄檔把硬碟佔滿就麻煩了。如果日誌不為0,篩選器起用後,對應檔案夾會產生類似以下的檔案,是文字格式設定的,可以用記事本查看。(via:沒有ISAPI Rewrite FULL照樣玩多網站URL Rewrite偽靜態:Ionic’s Isapi Rewrite Filter (IIRF,偽靜態URL重寫篩選器)的安裝與配置)
四、使用方法舉例:
先在需要重寫的網站根目錄下建立(IIRF.ini)檔案,並在檔案中寫入以下規則:
RewriteLogLevel 0
RewriteLog D:\iirf\logfiles\fxxsd
RewriteEngine ON
StatusInquiry ON
RewriteCond %{HTTP_HOST} ^(?!www)([^.]+)\.piaoyi\.org [NC]
RewriteRule ^/(.*)$ /type/*1.htm [U,L]
該規則實現的是 任意次層網域 a.piaoyi.org 、b.piaoyi.org、123.piaoyi.org (除www外)等自動重新導向到 /type/a.htm 、 /type/b.htm、 /type/123.htm 下。(飄易提醒:IIRF回調符是 *1,而 ISAPI_Rewrite裡的回調符是 %1).
更多的例子,請參考IIRF的英文協助手冊:
例子1,阻止特定IP段訪問
RewriteLogLevel 1
RewriteLog c:\inetpub\iirfLogs\iirf
RewriteEngine ON
StatusInquiry ON
IterationLimit 5
# If the IP address is not in the specified range, return 404
# (NF = Not Found)
RewriteCond %{REMOTE_ADDR} ^(?!24\.132\.(\d+)\.(\d+))
RewriteRule ^/.*$ - [NF]
例子2,次層網域訪問不同目錄
RewriteEngine ON
RewriteLog c:\inetpub\iirfLogs\iirf
RewriteLogLevel 1
StatusInquiry ON
# +++++++++++++++++++++++++++++++++
RewriteCond %{HTTP_HOST} ^alias1\.domain\.com$ [I]
ProxyPass ^/(.*)$ http://internal-server1/$1
RewriteCond %{HTTP_HOST} ^alias2\.domain\.com$ [I]
ProxyPass ^/(.*)$ http://internal-server2/$1
RewriteCond %{HTTP_HOST} ^alias3\.domain\.com$ [I]
ProxyPass ^/(.*)$ http://internal-server3/$1
例子3,老網域名稱301到新網域名稱
RewriteLog c:\logs\iirf
RewriteLogLevel 1
IterationLimit 10
MaxMatchCount 10
RewriteEngine ON
StatusInquiry ON
# With a request like http://olddomain.com/Alpha.htm or http://olddomain.com/Alpha.asp (or
# if the olddomain is prefixed with www) , redirect (HTTP 301)
# the request to http://www.domain.com/Alpha.aspx
RewriteCond %{HTTP_HOST} ^(www\.)?olddomain\.com$
RedirectRule ^/(.+)\.(htm|asp)$ http://www.newdomain.com/$1.aspx [R=301]