Ionic’s Isapi Rewrite Filter(IIRF)配置詳解
對於ISAPI Rewrite我想大家再熟悉不過了,它的僞靜態URL重寫功能已經被廣大服務器所應用,但是ISAPI Rewrite不是免費的,那麼有沒有一款軟件功能與ISAPI Rewrite相同,但又是免費的呢,而今答案是肯定的,Ionic’s Isapi Rewrite Filter 就是一款就可以實現ISAPI Rewrite相同的功能並且又是免費的,簡稱:IIRF。下面就對此做初步介紹。
Ionic’s Isapi Rewrite Filter 官方網站:http://iirf.codeplex.com
下載地址:http://iirf.codeplex.com/releases/view/14394
官方使用在線幫助手冊:http://cheeso.members.winisp.net/Iirf20Help/frames.htm
IIRF文件下載
將下載下來的文件解壓,只要找到bin目錄下的iirf.dll文件即可,其他文件都是沒有太大用處的,找到這個文件後將其複製到一個合適的目錄,我的目的就是多個網站都用這一個dll,所以我將它放置在一個自己整理的服務應用文件夾內;確保該文件夾IIS_WPG或者IUSR_XXX之類的賬號擁有權限訪問;
安裝配置(IIS7)
以下以IIS7.5爲例:
1、打開IIS,找到ISAPI篩選器,如圖:
添加iirf.dll,如圖:
2、然後打開處理程序映射,如圖,這一步可以省略:
添加腳本映射,如圖:
3、最後,設置iirf.ini和iirf.dll權限,如圖,如果iirf.dll所在分區爲FAT32格式,這一步可以省略:
注意:需要添加IIS_IUSRS和NETWORK SERVICE兩個用戶的讀寫權限。
4、查看設置狀態:
--在IIRF.ini文件中輸入以下內容--
#開啓設置狀態
StatusUrl iirfStatus
StatusInquiry ON
#設置日誌
RewriteLog D:/inetpub/IonicIsapiRewriter/iirfLog.out
RewriteLogLevel 5
#開啓RewriteEngine
RewriteFilterPriority HIGH
NotifyLog ON
RewriteEngine ON
然後在瀏覽器窗口中輸入網址+iirfstatus即可查看設置狀態
http://localhost:81/iirfstatus (本人是在本地測試的)
關於iirf.ini規則的編寫
規則文件格式基本照搬ISAPI Rewrite,要作修改,如:
RewriteRule [源URL正則條件] [目的URL]
ISAPI Rewrite與IIRF的區別就在[目的URL],ISAPI Rewrite的要轉義,而IIRF不用轉義。
如果有現成的ISAPI Rewrite的規則可以直接複製過來,將[目的URL]中的反斜槓(/)一個個刪除就可以用在IIRF中用了。
值得一提的是,INI配置文件是動態加載的,我們在配置文件的時候不需要重新啓動IIS就可以看到配置文件的結果;
好了,由於篇幅所限,就到此吧,如果有什麼疑問可以一起交流。
此內容引自大愚網技術世界,原文地址:http://www.dayunet.com/Archiver/view.asp?id=484
全局配置(iirfglobal.ini)
如果我們想要作用在所有加載了這個dll的網站的配置,我們可以在dll文件夾創建一個iirfglobal.ini文件,這個文件可以使所有加載了同文件夾內的DLL的所有網站使用這個相同的配置,單個配置就需要在每個網站的根目錄創建一個文件名iirf.ini的文件,並在其中編寫規則即可;
IIRF的Log日誌設置
RewriteLog c:/temp/iirfLog.outRewriteLogLevel 0
在我們調試規則的時候,我們可能需要看一下調試的內容Log一邊糾正規則:
路徑設置,確保文件夾的存在,否則會生成錯誤系統Log,但不影響IIRF的運行日誌的等級,默認值爲0
0 – 不會記錄日誌 1 – 少許的日誌 2 – 比較多的日誌 3 – 比較詳細的日誌 4 – 詳細的日誌,並會跟蹤server variable和替換的字符串。
5 – 詳細的日誌,包括日誌文件更改的事件,建議方便調試的時候使用。
規則格式
RewriteRule url-pattern replacement-string [modifiers]
url-pattern: 匹配的正則表達式(必需)
replacement-string: 要替換的字符串(必需)
modifiers: 有關對RewriteRule的操作標記,可選選項 modifiers的功能。
下面列舉了它的所有值,允許組合(如[R,L]):
R = Redirect(URL跳轉到<replacement-string>地址)
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服務器變量中)
IIS多站點僞靜態實現工具Ionic’s Isapi Rewrite Filter(IIRF)——ISAPI Rewrite FULL的替代方案
IIS中增加URL Rewrite功能,最多人選用的是名爲“ISAPI Rewrite”的軟件,網上下載的破解版,其實破解不完善,最終會不能用。
再次查找,找到了Ionic’s Isapi Rewrite Filter,完全開源,完全免費,也完全沒有中文使用手冊。
不過,IIRF可以完美的支持IIS下多站點的僞靜態,可以定義一個所有站點共用的全局規則、以及對每個站點分別定義規則。其規則與apache下的規則基本上完全一致,當然與ISAPI Rewrite也高度兼容,完全可以替代“ISAPI Rewrite”。
首先到官方網站http://www.codeplex.com/IIRF/Release/ProjectReleases.aspx下載最新軟 件包,注意要下載的是IonicIsapiRewriter-2.0-Release-bin.zip,版本號可能會變化。以下安裝僅針對Windows2003+IIS6.0的服務器環境。
一、安裝IIRF
1、複製IIRF的DLL(IIRF.dll)到相應的文件夾,如D:/Rewrite,或者,它可以在一個完全不同的目錄樹。
2、如果您創建一個服務器全局範圍的設置文件(iirfglobal.ini),你必須把它與(iirf.dll)文件在同一目錄中。 該URL Rewrite篩選器將尋找其在該文件中的全局設置文件。 如果是多個站點,則在站點更目錄下創建(iirf.dll)文件。
3、對(iirf.dll)所在目錄賦予IIS_WPG用戶組“讀取”、“讀取與運行”、“寫入”權限。
4、 打開Internet信息服務管理器。右鍵點擊IIS管理器左欄“網站”->“屬性”,彈出“網站屬性”選項卡,選擇“ISAPI篩選器”,如下圖添加IIRF。
5、重啓IIS
6、右鍵點擊IIS管理器左欄“網站” ->“屬性”,彈出“網站屬性”選項卡,選擇“ISAPI篩選器”,查看“IIRF”加載是否成功。若是綠色向上箭頭,則表示加載成功。
二、規則文件格式基本照搬ISAPI Rewrite,要作修改
RewriteRule [源URL正則條件] [目的URL]
ISAPI Rewrite與IIRF的區別就在[目的URL],ISAPI Rewrite的要轉義,而IIRF不用轉義。
如果網上有現成的ISAPI Rewrite的規則可以直接複製過來,將[目的URL]中的反斜槓()一個個刪除就可以用在IIRF中用了。
知道這個之後,你就可以隨便在網上與人交流,按ISAPI Rewrite交流,最後把轉義符()刪掉就行了。
三、日誌設置
在IIRF中日誌值可以設置爲0-5,在規則文件的開頭部分有兩行設置日誌類型
RewriteLog C:RewritesupesiteiirfLog.out (注意要寫清楚路徑,各站點不同)
RewriteLogLevel 0 (0爲不記類,3爲一般測試,5爲處理故障)
日誌的代價高昂,同時不會自動刪除文件,日誌類型一定要設成0,除非用於檢查才能修改爲其他值,檢查完後一定要改爲0,否則日誌文件把硬盤佔滿就麻煩了。
如果日誌不爲0,篩選器起用後,對應文件夾會產生類似以下的文件,是文本格式的,可以用記事本查看。
iirfLog.out.12345.log
四、查看配置
在IIRF.ini文件中輸入以下配置參數,則可通過瀏覽器方便查看目前IIRF配置
StatusUrl iirfStatus
StatusInquiry ON
在瀏覽器中輸入http://localhost/iirfstatus,即可查看。
五、規則文件可隨時修改,隨時生效!
六、附上WordPress的IIRF規則
先到WordPress後臺設置固定連接爲:/post/%post_id%.html
然後在WordPress所在網站的根目錄創建(iirf.ini)文件,並在文件中加入以下規則:
RewriteLogLevel 0 RewriteLog E:/flyingbluelogfilesIIRFLOGlog StatusUrl iirfStatus StatusInquiry ON RewriteRule /index.html$ /index.php [L] # # from accessing through HTTP # # WordPress rewrite rules # # Below is for permalink like /post/%post_id%.html # # Provided By Sideblue RewriteCond %{REQUEST_FILENAME} ^wp-content.* RewriteCond %{REQUEST_FILENAME} ^wp-admin.* RewriteCond %{REQUEST_FILENAME} ^wp-include.* RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule /post/tag/(.*) /index.php?tag=$1 RewriteRule /tag/(.*) /index.php?tag=$1 RewriteRule /(contact|about-copyright|favor|archives|tags|sitemap) /index.php?pagename=$1 RewriteRule /post/category/(.*)/(feed|rdf|rss|rss2|atom)/?$ /wp-feed.php?category_name=$1&feed=$2 RewriteRule /post/category/?(.*) /index.php?category_name=$1 RewriteRule /author/(.*)/(feed|rdf|rss|rss2|atom)/?$ /wp-feed.php?author_name=$1&feed=$2 RewriteRule /author/?(.*) /index.php?author_name=$1 RewriteRule /rss.xml /wp-feed.php?feed=rss2 RewriteRule /feed/?$ /wp-feed.php?feed=rss2 RewriteRule /comments/feed/?$ /wp-feed.php?feed=comments-rss2 # RewriteRule /([0-9]+)/?([0-9]+)?/?$ /index.php?p=$1&page=$2 # RewriteRule /post/([0-9]+)/?([0-9]+)?/?$ /index.php?p=$1&page=$2 RewriteRule /post/([0-9]+).html /index.php?p=$1 RewriteRule /page/(.*)/?s=(.*) /index.php?s=$2&paged=$1 RewriteRule /page/(.*) /index.php?paged=$1 RewriteRule /post/date/([0-9]{4})([0-9]{1,2})([0-9]{1,2})/([^/]+)/?([0-9]+)?/?$ /index.php?year=$1&monthnum=$2&day=$3&name=$4&page=$5 RewriteRule /post/date/([0-9]{4})/([0-9]{1,2})/([0-9]{1,2})/?$ /index.php?year=$1&monthnum=$2&day=$3&page=$4 RewriteRule /post/date/([0-9]{4})/([0-9]{1,2})/?$ /index.php?year=$1&monthnum=$2&page=$3 RewriteRule /post/([0-9]+).html/(feed|rdf|rss|rss2|atom) /index.php?feed=rss2&p=$1 RewriteRule /post/([0-9]+).html/trackback /wp-trackback.php?p=$1 |