ISAPI_Rewrite中文手冊

參考:http://blog.csdn.net/fanxiaojie119/article/details/5353186javascript

第一章:軟件介紹
ISAPI_Rewrite 是一款適用於IIS的功能強大的基於正則表達式的URL處理模塊。它兼容Apache的mod_rewrite的語法,從而使僅僅複製.htaccess文件就把配置從appach移植到IIS中或者從IIS移值到appach中變成可能。請參閱3.2兼容性圖表這一節。
ISAPI_Rewrite最重要的功能:
? ISAPI_Rewrite提供了和Apach mod_rewrite相同的句法和行爲,使僅僅拷貝.htaccess文件就完成配置移植成爲功能。(要想閱讀更多關於與mod_rewrite的兼容性,請參閱3.2兼容性圖表這一節。)
? 正則表達式支持靈活而強大的配置。
? 極速並且容易升級的純C++代碼。
? 真正的分佈式配置:實時監控服務器全局級別、虛擬主機(網站)級別、目錄級別的.htaccess文件。
? 隔離性:用戶級配置隻影響本地用戶環境,從而使ISAPI_Rewrite成爲Web主機提供商的理想解決方案。
重要的應用示例:
? 搜索引擎優化。
? 一臺Web服務器的代理內容通過另外一臺web服務器。
? 防止內容被吸血(盜鏈)。
? 阻斷特定主機、反向連接或者煩人的搜索機器人。
? 內容商議:向不一樣的語言用戶或者不一樣的瀏覽器用戶提供不一樣的文件。示例
? 爲羣集式服務器架構模擬負載均衡。
訂價資料
? 45天的試用期
? 單機版99美圓
? ISAPI_Rewrite精簡版是免費的。在這裏能夠看到受限的細節說明。
? 大宗採購可議折扣。java

2.1系統要求
ISAPI_Rewrite能夠被安裝在下列操做系統中:
? Windows 2000 with IIS 5
? Windows XP with IIS 5.1
? Windows Server 2003 with IIS 6.0
? Windows Vista with IIS 7.0
? Windows Server 2008 with IIS 7.0
在安裝ISAPI_Rewrite以前,操做系統中必須先安裝IIS。
32位和64位的Windows版本都是支持的,可是你必須下載32位版和64位版兩種不一樣的安裝包。Windows Installer 2.0必須運行安裝程序。你能夠從微軟的網站上下載到最新版本的Windows Installer。
在Windows Vista和Windows Server 2008上安裝ISAPI_Rewrite,還必須先安裝下面兩個模塊(默認狀況下這兩個模塊是不安裝的)
? ISAPI過濾器
? ISAPI 擴展git

2.2安裝程序
在運行安裝包以前請先閱讀系統要求部分。下載並安裝某個版本的ISAPI_Rewrite.msi,依照安裝嚮導的說明操做。安裝過程是自動的,並有自我描述。ISAPI_Rewrite在自動安裝過程當中必須重啓IIS。下列服務必須被重啓:IISADMIN、W3SVC。不須要手工把任何ISAPI篩選器或者擴展加入到網站或者全局列表中。它可以在安裝和配置過程當中自動完成。
命令行安裝
ISAPI_Rewrite也可以經過命令行進行後臺安裝。請使用如下命令行語法來安裝:web

msiexec /i ISAPI_Rewrite3.msi /qn AcceptEULA=Yes REGISTRATIONCODE=Code REGISTRATIONNAME=Name

用命令行來後臺反安裝ISAPI_Rewrite請使用下面的語法:正則表達式

msiexec /x ISAPI_Rewrite3.msi /qn KEEPUSERFILES=Yes

2.3手工安裝
要手工安裝ISAPI_Rewrite的話,你必須下載不一樣的手工安裝包包含全部必須的文件。ISAPI_Rewrite精簡版不支持手工安裝。你能夠安裝所有功能或者僅僅安裝它們中的一部分。
手工安裝包包含下列文件:
? ISAPI_Rewrite.dll - 這是ISAPI篩選器自己。
? ISAPI_RewriteProxy.dll - 這是爲代理操做的ISAPI擴展模塊必不可少的。
? license.rtf - EULA的產品許可證。
? ISAPI_Rewrite.chm - .文檔文件。
? httpd.conf - 全局配置文件示例。
安裝ISAPI_Rewrite,首先你必須在你在IIS系統中註冊ISAPI_Rewrite.dll做爲ISAPI篩選器。按默認ISAPI_Rewrite.dll文件是用來做爲全局ISAPI篩選器的。並且它還可以被安裝到某個特定的網站裏,你須要記住在同一時間段裏只有一個ISAPI_Rewrite.dll實例可以加載到一個IIS工做進程裏,這意味着若是你決定把ISAPI_Rewrite的ISAPI篩選器單獨地安裝到每一個站點裏的話,你必須把這些站點切換高隔離模式,從而爲這些網站產生獨立的工做進程。若是你須要在每一個站點上分別安裝ISAPI_Rewrite,咱們一般會建議改成在整個IIS上全局地安裝它。
在Window 2000,Window XP 和Windows Server 2003中註冊ISAPI 篩選器,不管是整個IIS服務器要用它仍是個別WEB網站要用它,都要用IIS 的MMC管理單元來把ISAPI_Rewrite.dll添到ISAPI篩選器列表。在Windows Vista和Windows Server 2008中首先你須要安裝可選IIS組件:萬維網服務、應用程序開發功能、ISAPI篩選器。
若是你須要代理服務器功能,你還須要將ISAPI_RewriteProxy.dll註冊爲ISAPI擴展來侍服文件擴展名「*. rwhlp」。在不一樣的IIS版本中要求不一樣的操做。請參閱你管理的IIS版本的文檔來了解如何註冊一個新的ISAPI擴展並把它映射到IIS系統的文件擴展名上。在Windows Vista和windows server 2008首先必須安裝可選的IIS組件:萬組網服務、應用程序開發功能、ISAPI篩選器。使用短路徑名(8.3模式)做爲ISAPI_RewriteProxy.dll的模塊路徑,若是路徑裏有一個空格字符,IIS載入這個模塊時將失敗。
把httpd.conf文件放在ISAPI_Rewrite.dll文件的同一目錄下並編輯它。
把下列兩行內容放到httpd.conf文件中以註冊ISAPI_Rewrite 產品:算法

RegistrationName=Your registration nameRegistrationCode=REG-CODE-PROVIDED-FROM-HELICON

依照「運行ISAPI_Rewrite的權限需求」這一部分的說明來檢查文件系統權限。express

2.4反安裝
反安裝程序會刪除全部安裝程序所生成的文件、從管理元庫中註銷篩選器,並刪除全部由安裝程序所添加的其它管理元庫變化。若是用戶決定在反安裝過程當中保留用戶文件的話,下列用戶數據文件在反安裝後會被留下來。windows

文件名 說明
Program Files/Helicon/ISAPI_Rewrite/httpd.conf 用戶規則的主配置文件
Program Files/Helicon/ISAPI_Rewrite/error.log 包含錯誤日誌的文件
Program Files/Helicon/ISAPI_Rewrite/rewrite.log 包含重寫日誌的文件
.htaccess (various folders) 用戶建立的含有規則的配置文件

「刪除用戶建立的文件」的選項在將反安裝過程當中提供給用戶。若是啓用這個選項則卸載程序也將刪除位於Program Files文件夾裏用戶建立的文件。 .htaccess文件不會被刪除。
要用命令行後臺卸載ISAPI_Rewrite,請使用下面的語法:後端

msiexec /x ISAPI_Rewrite3.msi /qn KEEPUSERFILES=Yes

2.5運行ISAPI_Rewrite所需的權限
在一個乾淨的默認Windows系統上自動安裝ISAPI_Rewrite不要求任何權限調整。可是一些其它產品好比說Plesk、IIS鎖定工具的安裝,等等,可能收緊服務器的安全性,並妨礙ISAPI_Rewrite的正常運行。下面是ISAPI_Rewrite的權限需求的列表單子:
在Windows 2000、Windows XP和Windows 2003的IIS5兼容模式下,篩選器運行在System賬戶下的inetinfo.exe進程中。那個system賬戶至少得被授予放置ISAPI_Rewrite安裝文件的那個文件夾的「讀取」和「目錄瀏覽」的權限。咱們還建議給予system賬號對這個文件夾的通常修改權。這將容許生成一些包含解析或者其它錯誤的文件。system賬號還必須在任何包含了.htaccess文件的網站文件夾裏一樣被授予這些權限,不然ISAPI_Rewrite將不能加載並監視它。
請稍留意ISAPI_Rewrite安裝目錄上的任何一點拒絕權限設置,由於在Windows 操做系統中,拒絕權限優先於任何容許權限記錄。
在Windows 2003的自然IIS模式(WPI模式)以及Windows Server 2008中,不管是篩選器仍是代理服務都運行在每一個網站相應的運行程序池的w3p.exe工做進程中,每一個應用程序池均可以使用它本身的定製來配置,這可能使權限設置成了一種複雜的工做。然而,在一個正確的IIS配置中,每一個使用中的定製必須是IIS_WPG組的一個成員。所以,IIS_WPG組能夠被用來代替System賬號去分配前面所寫的權限需求。
在Windows Vista 中權限配置是和Windows 2003的配置差很少的,只是它沒有IIW_WPG組。因此,全部的WPI賬號(通常Network Service是它的唯一賬號)都必須授予上述必需權限。
此外,爲了讓代理服務功能能工做,你必須在網站屬性或者運行代理服務的web應用程序的屬性中給予一個「純腳本」的執行權限。api

2.6MSI的自定義行爲自定義行爲 
 

自定義行爲 說明
WiseAltStartup
自動智能啓動
爲運行在延時模式中的自定義行爲保存屬性的當前狀態。
使用一個可執行文件(dll)
發生在:安裝、反安裝。
WiseCleanup
智能清理
這個行爲被調用來清理上一個自定義行爲所遺留下的臨時文件
使用一個可執行文件(dll)
發生在:安裝、反安裝。
WiseStartup
智能啓動
這個行爲使調用一個.dll文件或者提取必要Wisescript.exe文件和.dll文件的行爲能夠傳遞參數。
使用一個可執行文件(dll)
發生在: 安裝、反安裝
WiseUpgradeCheck
智能可選擇地升級
這個行爲被調用來解決當Windows安裝程序運行時不檢測應用程序的早期版本的問題。
使用一個可執行文件(dll)
發生在:安裝。
WiseUpgradeCheckEx
智能預選升級
添加這個行爲用來解決當Windows安裝程序運行時不檢測應用程序的早期版本的問題。
使用一個可執行文件(dll)
發生在:安裝。
WiseGetIISVersion
智能得到IIS版本
對主要的IIS版本設置屬性(IISVERSION).
使用一個可執行文件(dll)
發生在:安裝。
RegisterFilterInMetabase
在管理元庫中註冊篩選器
這個行爲添加一個命名爲ISAPI_Rewrite3的全局ISAPI篩選器到IIS管理元庫裏
IIS5, IIS6 管理元庫: IIS:/LM/W3SVC/Filters/ add key ISAPI_Rewrite3
IIS:/LM/W3SVC/Filters/FilterLoadOrder append "ISAPI_Rewrite3"
使用一個可執行文件(dll)
發生在:安裝。
RemoveFilterFromMetabase
從管理元庫中刪除篩選器
這個行爲從IIS管理元庫裏移除了名爲ISAPI_Rewrite3的全局ISAPI篩選器。
IIS5, IIS6 管理元庫: IIS://localhost/W3SVC/LM/W3SVC/Filters/ delete key ISAPI_Rewrite3
IIS:/LM/W3SVC/Filters/FilterLoadOrder remove"ISAPI_Rewrite3"
使用一個可執行文件(dll)
發生在:反安裝、回滾。
AddApplicationExtension
添加應用程序擴展
只用於Windows 2003機器添加ISAPI_RewriteProxy.dll到ISAPI擴展中,並使Web服務器擴展名列表中的這個ISAPI擴展名可用。
IIS6管理元庫: IIS:/LM/W3SVC/
adds entry to the在管理元庫屬性 WebSvcExtRestrictionList中增長metabase property "ISAPI_Rewrite3 proxy"條目;
在管理元庫屬性 ApplicationDependencies 增長"ISAPI_Rewrite3 proxy;ISAPI_Rewrite3"條目;
使用一個可執行文件(dll)
發生在:安裝。
RemoveApplicationExtension
刪除應用程序擴展
只用於Windows 2003從ISAPI擴展中刪除ISAPI_RewriteProxy.dll,並從web服務器擴展名列表中刪除這個ISAPI擴展名。
IIS6管理元庫: IIS:/LM/W3SVC/
1.從管理元庫屬性 WebSvcExtRestrictionList 中刪除"ISAPI_Rewrite3 proxy"條目;
2.從管理元庫屬性 ApplicationDependencies中刪除"ISAPI_Rewrite3 proxy;ISAPI_Rewrite3"條目;
使用一個可執行文件(dll)
發生在:反安裝、回滾。
RegisterExtensionInScriptMap
在腳本映射中註冊擴展
在IIS管理員庫中將ISAPI_RewriteProxy.dl註冊爲ISAPI擴展來處理*.rwhlp文件擴展名
IIS5,IIS6管理元庫: IIS://LM/W3SVC/
使用一個可執行文件(dll)
發生在:安裝。
RemoveExtensionFromScriptMap
從腳本映射中刪除擴展
從IIS管理元庫中移除做爲ISAPI擴展、用於處理*.rwhlp文件擴展名的ISAPI_Rewrite.dll的註冊信息
IIS5, IIS6管理元庫: IIS://LM/W3SVC/
使用一個可執行文件(dll)
發生在:反安裝、回滾。
GetServisesStatus
得到服務狀態
保存IISADMIN、W2WC、NNTP、SMTP 和FTP 服務的當前狀態
建立msi屬性: [SERVICES_STATUS]
使用一個可執行文件(dll)
發生在: 安裝、反安裝。
StartServicesEx
按預設開啓服務
根據狀態預設來啓動ISADMIN、W2WC、NNTP、 SMTP 和 FTP 服務
使用msi 屬性: [SERVICES_STATUS]
使用一個可執行文件(dll)
發生在: 安裝、反安裝。
SaveProductID
保存產品ID
若是要註冊產品的話,保存REGISTRATIONNAME和REGISTRATIONCODE的屬性值
使用msi 屬性: [REGISTRATIONNAME] , [REGISTRATIONCODE];
使用文件: [INSTALLDIR]\ISAPI_Rewrite3\httpd.conf
使用一個可執行文件(dll)
發生在: 安裝。
Check32bitMode
檢測32位模式
在64位系統中檢查32位IIS兼容模式是否可用,從而安裝正確的ISAPI篩選器版本。IIS6, IIS7
使用管理元庫路徑: IIS://LM/W3SVC/AppPools property Enable32bitAppOnWin64;
使用msi 屬性:[ENABLE32BITAPPONWIN64]
檢查一個32位的應用程序是否能運行在一臺安裝了64位版本的windows的電腦上。
使用javascript腳本
發生在: 安裝。
CheckIISModules
檢測IIS模塊
在IIS7的機器上檢查是否須要安裝IsapiFilterModule和IsapiModule模塊
IIS7 管理元庫路徑:
<system.webServer>
<globalModules>
<add name="IsapiModule" image="%windir%\System32\inetsrv\isapi.dll" />
<add name="IsapiFilterModule" image="%windir%\System32\inetsrv\filter.dll" /> 

</globalModules>
</system.webServer>
使用javascript腳本
發生在: 安裝。
AddGlobalIsapiFilter
添加全局ISAPI篩選器
只用於IIS7的機器。這個行爲會在IIS管理元庫裏添加一個命名爲ISAPI_Rewrite3的全局ISAPI_Rewrite篩選器
IIS7的管理元庫路徑:
<configuration>
<system.webServer>
<isapiFilters>
<filters>
<filter name="ISAPI_Rewrite3" path="C:\Program Files\Helicon\ISAPI_Rewrite3\ISAPI_Rewrite.dll" enabled="true" enableCache="false">
</filter>
</filters>
</isapiFilters>
</system.webServer>
</configuration>
使用JavaScript腳本
發生在:安裝。
DeleteGlobalIsapiFilter
刪除全局ISAPI過濾器
只用於IIS7的機器,這個行爲會從IIS管理元庫中刪除名爲ISAPI_Rewrite3的全局ISAPI篩選器。
IIS7的管理元庫路徑:
<configuration>
<system.webServer>
<isapiFilters>
<filters>
<filter name="ISAPI_Rewrite3" path="C:\Program Files\Helicon\ISAPI_Rewrite3\ISAPI_Rewrite.dll" enabled="true" enableCache="false" >
</filter>
</filters>
</isapiFilters>
</system.webServer>
</configuration>
使用JavaScript腳本
發生在:反安裝、回滾。
AddIsapiCgiRestriction
添加ISAPI CGI約束
Only for IIS7 machines register ISAPI_RewriteProxy.dll as ISAPI extension in IIS metabase.
只用於IIS7的機器,在IIS管理元庫中將ISAPI_RewriteProxy.dl爲ISAPI擴展
IIS7管理元庫路徑:
<configuration>
<system.webServer>
<security>
<isapiCgiRestriction>
<add path="C:\Program Files\Helicon\ISAPI_Rewrite3\ISAPI_RewriteProxy.dll" allowed="true" description="Helicon Proxy" /> 
</isapiCgiRestriction>
</security>
</system.webServer>
</configuration>
使用JavaScript腳本
發生在:安裝。
DeleteIsapiCgiRestriction
刪除ISAPI CGI約束
只用於IIS7的機器,從IIS管理元庫中刪除用做ISAPI擴展的ISAPI_RewriteProxy.dll。
IIS7 管理元庫路徑:
<configuration>
<system.webServer>
<security>
<isapiCgiRestriction>
<add path="C:\Program Files\Helicon\ISAPI_Rewrite3\ISAPI_RewriteProxy.dll" allowed="true" description="Helicon Proxy" />
</isapiCgiRestriction>
</security>
使用JavaScript腳本
發生在:反安裝、回滾。
AddScriptMap
添加腳本映射
只用於IIS7的機器,在IIS管理元庫中將ISAPI_RewriteProxy.dll註冊爲ISAPI擴展用於處理*.rwhlp文件擴展名。
IIS7管理元庫路徑:
<configuration>
<system.webServer>
<handlers>
<add name="Helicon Proxy" path="*.rwhlp" verb="*" modules="IsapiModule" scriptProcessor="C:\Program
Files\Helicon\ISAPI_Rewrite3\ISAPI_RewriteProxy.dll" resourceType="Unspecified"/>

</handlers>
</system.webServer>
</configuration>
使用JavaScript腳本
發生在:安裝。
DeleteScriptMap
刪除腳本映射
只用於IIS7的機器,從IIS管理元庫裏去除用做ISAPI擴展以處理*.rwhlp文件擴展名的ISAPI_RewriteProxy.dll的註冊
IIS7管理元庫路徑:
<configuration>
<system.webServer>
<handlers>
<add name="Helicon Proxy" path="*.rwhlp" verb="*" modules="IsapiModule" scriptProcessor="C:\Program
Files\Helicon\ISAPI_Rewrite3\ISAPI_RewriteProxy.dll" resourceType="Unspecified"/>

</handlers>
</system.webServer>
</configuration>
使用JavaScript腳本
發生在:反安裝、回滾。

3.1基本概念

ISAPI_Rewrite提供了一個基於規則的重寫引擎能飛速重寫被請求的URL。它支持幾乎無限量的規則和幾乎無限量的附加規則條件來提供真正靈活和有效的URL處理機制。能夠根據HTTP頭、服務器變量、被請求的URL自己以及其它不一樣的條件的測試結果來對URL做出處理。
URL數據處理是用一個文本配置文件來定製的,內含各類指令設置。配置分幾種等級。首先是全局(服務器範圍的)配置指令,放置在ISAPI_Rewrite安裝目錄裏的一個名爲httpd.conf的文件裏。那裏還有若干個標籤能夠封裝應用到特殊位置的指令:<VirtualHost>、<Directory>、<DirectoryMatch>、<Files>、 <FilesMatch>、<Location>以及<LocationMatch>。最後ISAPI_Rewrite支持能夠放在任何網站目錄裏的.htaccess文件,那些文件中的規則能夠應用到該位置以及它的子目錄中。全部的配置文件在每次修改文件後都會被自動重載。容許用第三方程序和腳原本修改文件。
在不少狀況下ISAPI_Rewrite是用來重寫URL的。除了重寫以外,ISAPI_REWRITE可以修改、生成、刪除任何其它客戶端Request中的HTTP頭。模塊操做能夠載入改寫、代理、重定向或者阻斷原始客戶端到服務器的請求。
Rewriting可能使服務器在獲得了一個客戶端的源請求時用一個新的URL繼續請求處理。新的URL能夠包括查詢串部分(跟在問號後面),也能夠指向任何一個徹底的靜態文件或者腳本(例如asp)、或者程序(例如.exe),等等。對用戶和網站配置來講重寫是完全透明的。由於它Web應用程序收到請求以前在服務器內部執行。
Proxying使URL通過內部處理後指向另外一臺服務器,並很快傳遞到遠程服務器上(換言之,規則處理在這裏停止了)。遠程服務器的響應很快被傳回客戶端。代理服務器要求你指定完整的有效URL,以協議、包括主機名開頭等等。ISAPI_Rewrite使用ISAPI擴展來處理代理請求,你能夠在「代理服務器配置」這一章裏讀到更多信息。
Redirection將發送一個帶有重定向指令的即時響應(HTTP響應碼爲302或者說301),將網址設置爲一個新的位置。您能夠在重定向指令裏使用絕對URL格式(這是RFC2616所要求的)將請求重定向到不一樣的主機、端口和協議。若是此信息被忽略, ISAPI_Rewrite將自動照當前的協議、服務器名稱和目錄位置提供URL。重定向指令老是致使重寫引擎停止處理後面的規則序列。
每一個規則按它在配置文件中出現的順序來應用。目錄級配置文件從父路徑開始一個接一個地處理,來自於全局配置文件的規則最早適用。
在修改URL以前ISAPI_Rewrite會保存原URL到Http頭,命名爲X-Rewrite-URL。而後它可以在腳本中做爲HTTP_X_REWRITE_URL服務器變量取回。由於在IIS裏,系統變量名不能被修改,因此ISAPI_Rewrite不能提供與Apache兼容的變量名REQUEST_URI。若是你的應用程序的設計要依賴於REQUEST_URI變量,你必須修改它,用HTTP_X_REWRITE_URL變量來代替。下面是一個PHP代碼補丁的示例:
if (isset($_SERVER['HTTP_X_REWRITE_URL'])){$_SERVER['REQUEST_URI'] = $_SERVER['HTTP_X_REWRITE_URL'];}
後面跟有RewriteRule(或者RewriteProxy)指令的多重RewriteCond指令隻影響單個規則。若是一些條件須要被用於多個規則,必須重複寫這些條件指令以應用到每條規則上。

3.2和Apache下mod_rewrite的兼容性

這個版本的ISAPI_Rewrite是爲了最大程度上保持與Apache的mod_rewrite的兼容性。這個目標已經很大程度上實現了,儘管有一些功能沒法執行,由於它們和Apeach以及UNIX結構高度綁定,並且它們在IIS上執行是不敏感的。舉例說明:第H條:「強制內容處理」標記不能執行,由於在IIS中內容處理的範圍依賴於擴展名。或者第[NS]條:「沒有子請求」標記是無心義的,由於在IIS中是沒有子請求的。
這裏有一個完整的ISAPI_Rewrite和mod_rewrite兼容性圖表。標記爲綠色的功能或指令是充分支持的,黃色的功能是部分支持或計劃在下一版本中支持,標示爲紅色的功能是不支持的。
·  兼容Perl的正則表達式 (plus extended syntax) 
· 服務器級httpd.conf配置
· 虛擬網站.htaccess配置文件
· 目錄.htaccess配置文件
· <VirtualHost> 
· <Directory> 
· <DirectoryMatch> 
· <Files> 
· <FilesMatch> 
· <Location> 
· <LocationMatch> 
· AccessFileName 
· RewriteEngine 
· RewriteRule 
o $N 規則後向引用
o %N RewriteCond 後向引用
o ${mapname:key|default} 
o %{VARNAME} 服務器變量
o '!' 取非
o [C] 與下一個規則聯鎖
o [CO=name:val:domain:lifetime:path] 設置cookie 
o [E=var:val] 設置環境變量
o [F] 強制禁止應答
o [G] 強制繼續應答
o [H=content-handler] 明確的內容處理 (不適用) 
o [L] 上一個規則標記
o [N] 再次應用規則
o [NC] 大小寫不敏感
o [NE] 不轉義輸出
o [NS]非內部子請求
o [P]代理經過
o [PT] 傳遞經過下一個處理程序 (一直開啓) 
o [QSA] 追加查詢字符串
o [R =code] 重定向
o [S=num] 跳到下面第 n條規則
o [T=MIME-type] 強制明確應答 MIME 類型
· RewriteCond 
o [NC] 大小寫不敏感
o [OR] 邏輯並集
o %{HTTP:header} 
o '!' 非
o '<CondPattern' 大於比較符
o '>CondPattern' 小於比較符
o '=CondPattern' 等於比較符
o '-d' 目錄存在
o '-f' 文件存在
o '-s' 非零文件
o '-l' 符號連接
o '-x' 有可執行權限的文件
o '-F' 經過子請求文件存在
o '-U' 經過子請求URL存在
· RewriteBase 
· RewriteMap 
o txt: 文本映射
o rnd: 隨機映射
o int: 內部函數 toupper, tolower, escape, unescape 
o prg: 外部程序
o dbm: 散列文件
· RewriteLog 
· RewriteLogLevel 
· RewriteOptions 
· RewriteLock 
· AllowOverride
3.3使用環境以及處理順序
如下是這個程序文檔中要被用到的使用環境的詳解:
server config
這個標誌表示該指令能夠用在全局httpd.conf配置文件中,可是不能用在任何一個分區(例如<Virtualhost>或者<Directory>)內部。它不容許放在.htaccess文件中。
vitrual host
這意味着指令能夠出如今<VirtualHost>容器內。
directory
這個標誌表示指令在<Diretory>、<Location>、<Files>容器內可用,並且它們的正則表達式是等價的。
.htaccess
使用環境標爲它的指令能夠出如今每一個目錄的 .htaccess文件中。記住當 RewriteRule指令用在.htaccess配置文件中時,它將自動從路徑中剝去本地目錄前綴,只對剩下的部分應用規則。你可使用RewriteBase指令顯式地給這些規則指定一個基本路徑。
應用次序
當同一分區內的多條指令同時適用時,理解每一個分區應用的次序是很重要的,由於它會對最終效果起做用。應用次序以下所述:
1.<Directory>(正則表達式除外):多個<Directory>分區能夠應用於單個請求,若是多個(非正則表達式)<Directory>分區匹配了包含文檔的這個目錄(或者它的上級目錄中的一個),則按照從短到長的匹配次序應用指令。
2..htaccess文件按父目錄到子目錄的順序應用。
3.<Files>和<FileMatch>同時被執行。
4.<Location>和<LocationMatch>也同時被執行。
先應用虛擬主機外面定義的相應分區和指令,再應用<VirtualHost>分區中的分區和指令。同一時間只有一個<VirtualHost>分區能夠應用給請求。較晚的分區優先於較早的那些。
3.4正則表達式
正則表達式語法指南是Rege++文檔的一部分,由John Maddock博士友情提供,Copyright ?1998-2004,包含在《Boost license》這本書裏。完整的語法說明能夠在《Boost.Regex documentation》中找到。
字面值
所的字符都是字面值,除了「.」「*」「?」「+」「(」「)」「{」「}」「[」「]」「^」和「$」。當這些字符由「\」前導時也是字面值。一個字面值是個匹配它本身的字符。
通配符
點字符「.」匹配空字符和換行符之外的任何單個字符。
重複
重複是被重複任意次數的表達式。一個表達式跟着「*」能夠被重複任意次數,包括重複零次。一個表達式跟着「+」能夠被重複任意次數,可是至少重複一次。一個表達式跟着「?」能夠被只重複零次或者一次。當須要明確指定重複的最低次數和最高次數時,能夠用限定運算符「{}」。這樣「a{2}」是字母「a」重複兩次。「a{2,4}」表示字母「a」重複2到4次。「a{2,}」表示字母「a」重複2到無限屢次。注意「{}」裏面必須沒有空格。並且它沒有對上限值和下限值限定範圍。全部的重複表達式參考儘量短的前子表達式:一個單獨字符,一個字符集,或者一個用「()」括起來的子表達式,舉幾個例子:
? "ba*"匹配全部的"b","ba","baaa" 等等。
? "ba+"匹配"ba"或"baaa",可是不匹配"b"。
? "ba?"匹配"b"或者"ba"。
? "ba{2,4}"匹配"baa","baaa","baaaa"。
懶惰型重複
在重複以後附加一個「?」就是懶惰型的重複了。一個懶惰型的重複是指匹配儘量短的字符串。
例如:匹配HTML標記對可使用下面這樣的正則表達式:
"<\s*tagname[^>]*>(.*?)<\s*/tagname\s*>"
在這種狀況下$1將包含標籤對之間的文本,並且是最短的匹配字符串。
插入成份
插入成分有兩個用處——把項目編組到子表達式中,而且對生成的匹配標號。例如,表達式"(ab)*"將匹配全部的這類字符串"ababab"。全部的被插入成份標號的子匹配將能夠用\N或者$N語法來回溯引用到。它容許子表達式匹配空字符串,子表達式以1爲開始從左往右編號。子表達式0就是整個表達式。

正則表達式


無標記插入
有時候你須要把子表達式編組爲插入成份,可是不想爲這個插入成分而吐出另外一個標記的子表達式。在這種狀況下,一個非標記插入(?:expression)可能有用。例如,下例表達式能夠建立一個非子表達式:
"(?:abc)*"
N擇1標記

當表達式能夠匹配一個子表達式或另外一個的時候,N擇1標記起做用了。每一個N擇1能夠用|隔開。每一個N擇1標記是一個最大可能性前綴子表達式,它是和重複操做符相反的行爲。
示例:
? "a(b|c)"匹配"ab"或"ac"
? "abc|def"匹配"abc"或"def"
預置符
一個預置符是一個能夠匹配全部做爲預置成員的單個字符的預置。預置字符用方括號「[」和「]」括起來,能夠容納字面值、字符序列、字符類、經整理過的對象以及等價的類。用^打頭的預置聲明能夠排除包含的內容。
示例:
字面值
? "[abc]"匹配"a"或"b"或"b"。
? "[^abc]"匹配"a"和"b"和"c"以外的全部字符。
字符序列
? "[a-z]"匹配全部的從"a"到"z"的字符
? "[^A-Z]"匹配全部的字符除了從"A"到"Z"的這些字符。
字符類
字符類用語法"[:classname:]"來表示,classname是聲明過的預設值中的一個。例如:"[[:space:]]"是全部的空白佔位符的預設。下表中的字符類是可用的:
alnum 全部的alpha數字字母
alpha 字母表字符[a-zA-Z]。其它字符也能夠包含在內,這取決於本地環境
blank 全部的空白字符,包含回車或者空格
cntrl 全部的控制字符
digit 從0到9的數字
graph 全部的圖畫字符
lower 全部的小寫字母[a-z],其它的字符也能夠包含在內,這取決於本地環境
print 全部的印刷字符
punct 全部的標點符號
space 全部的空白佔位符
upper 全部的大寫字母[A-Z],其它的字符也能夠包含在內,這取決於本地環境
xdigit 全部的16進字字符0~9,A-F
word 全部的詞彙字符,包括字母數字外加underscore
unicode 全部的編碼大於255的字符,這隻對大範圍字符特徵類生效

這裏有一些縮寫法能夠代替以上字符類:
? \w 代替 [:word:]
? \s 代替 [:space:]
? \d 代替 [:digit:]
? \l 代替 [:lower:]
? \u 代替 [:upper:]

正則表達式

集合元素
集合元素通常採用預置聲明內加[.tagname.]的格式。其中tagname既能夠是一個單個字符,也能夠是一個集合元素名。例如:[[.a.]]等價於[a],[[.comma.]]等價於[,]。ISAPI_Rewrite支持全部的標準POSIX集合元素名,以及下面的這些字符組合:「ae」、「ch」、「ll」、「ss」、「nj」、「dz」、「lj」、任意小寫、大寫、首字母大寫的變化組合。多個字符集合元素能夠致使預置匹配一個以上的字符。例如:[[.ae.]]將匹配兩個字符,可是[^[.ae.]]只會匹配一個字符。
等價類
等價類通常採用預置聲明內加[=tagname=]的格式,其中tagname既能夠是單個字符,也能夠是一個集合元素的名稱,它能匹配一樣的主要等價類成員的字符,就跟集合元素[.tagname.]同樣。一個等級類是一個相同整理的字符預設,但主要是一個等價類的字符集,其主要排序關鍵字都是同樣的(例如,字符串一般先依字符整理,而後根據重音,而後根據大小寫。主要排序鍵與字符相關,次要與重音相關,再次與大小寫相關。若是沒有等價類符合tagname,則[=tagname=]是與[.tagname.]徹底同樣的。
Equivalence classes take the general form [=tagname=] inside a set declaration, where tagname is either a single character, or a name of a collating element, and matches any character that is a member of the same primary equivalence class as the collating element [.tagname.]. An equivalence class is a set of characters that collate the same, a primary equivalence class is a set of characters whose primary sort key are all the same (for example strings are typically collated by character, then by accent, and then by case; the primary sort key then relates to the character, the secondary to the accentation, and the tertiary to the case). If there is no equivalence class corresponding to tagname, then [=tagname=] is exactly the same as [.tagname.].
要在一個預設中包含字面值「-」,請這樣作:使它成爲開放的「[」或者「[^」後面的第一個字符、一個系列或者一個集合元素的末點,或者用一個前置的轉義字符如「[\-]」。要在一個預設中包含一個字面值「[」或者「]」或者「^」,請把它們做爲一個系列或者一個集合元素的末點,或者用一個前置的轉義字符。
行錨
錨用來匹配一行開頭或結尾的空串。「^」匹配行開頭的空串,「$」匹配行結尾的空串。
回溯引用
回溯引用是引用前面已經被匹配的子表達式。這個引用是被匹配的子表達式,而不是表達式自己。回溯引用包括轉義字符「\」跟着一個從1到9的數字。「\1」引用第一個子表達式,「\2」引用第二個,依次類推。舉個例子,表達式「(.*)\1」匹配任何關於它的中點重複的字符串,好比說「abcabc」或者「xyzxyz」。一個對子表達式的回溯引用不參加任何匹配,匹配空字符串。在ISAPI_Rewrite中,全部的回溯引用是對整個RewriteRule和相應的RewriteCond指令是全局性相關的。RewriteRule指令中若是有RewirteCond子令的話,子匹配從相應的RewriteRule指令的第一個RewriteCond指令開始從上到下從左往右編號。
向前查找
向前查找有兩種形式:正向前查找和負向前查找。
• "(?=abc)"匹配跟在表達式"abc"後面的零字符。
• "(?!abc)"匹配不跟在表達式"abc"後面的零字符。
通配符
下面的運算符提供了與GNU正則表達式庫的兼容性。
• "\w"匹配任意單個組詞字符,它等價於表達式「[[:word:]]」。
• "\W"匹配任意一個非組詞字符,它等價於表達式「[^[:word:]]」。
• "\<"匹配詞頭空字符串。
• "\>"匹配詞尾空字符串。
• "\b"匹配詞頭或者詞尾空字符串。
• "\B"匹配詞語中的空字符串。
轉義字符
轉義字符「\」含有多重意義:
• 轉義字符能夠引導一個運算符,例如:回溯引用、詞操做符
• 轉義字符可使下面的字符正常,好比說「\*」表明一個字面值「*」,而不是重複運算符。

單個字符轉義序列
下面的轉義序列是單個字符的別名:

轉義序列 字符代碼 含義
\a 0x07 信號鈴記號.
\t 0x09 製表符
\v 0x0B 垂直製表符
\e 0x1B ASCII轉義字符
\0dd 0dd 八進制字符代碼,其中dd是一個或多個八進制數字。
\xXX 0xXX 十六進制字符代碼,其中XX是一個或多個八進制數字。
\x{XX} 0xXX 十六進制字符代碼,其中XX是一個或更多十六進制數字,可選用Unicode字符。
\cZ z-@ ASCII轉義序列control-Z,其中Z是任意一個編碼大於或等於「@」的編碼的ASCII字符。

雜項轉義序列
如下提供perl的大部分兼容性,可是在\l、\L、\u和\U上有一些區別

轉義序列 含義
\w 等價於 [[:word:]].
\W 等價於[^[:word:]].
\s 等價於[[:space:]]。
\S 等價於[^[:space:]]。
\d 等價於[[:digit:]]。
\D 等價於[^[:digit:]]。
\l 等價於[[:lower:]]。
\L 等價於[^[:lower:]]。
\u 等價於[[:upper:]]。
\U 等價於[^[:upper:]]。
\C 任何單個字符,等價於「.」
\X 匹配任何Unicode組合字符序列,例如「a\x0301」(字符a和一個尖角)
\Q 開始引號運算符。後面跟前的全部的內容都被看成字面值,直到發現一個\E結束運算符。
\E 結束引用運算符,終止一個由\Q開頭的引用序列。

怎樣獲得匹配
正則表達式將匹配第一個可匹配字符串。若是從給定的起始處能夠匹配到不止一個字符串,則它會匹配那個能匹配得最長的字符串。若是從同一個起始處有多個合適的匹配,並且每一個匹配的長度都同樣,則將選擇那個第一子表達式匹配得最長的匹配。若是有兩個以上的匹配字符串它們的第一子表達式匹配得同樣長,則比較第二子表達式匹配的長度,如此類推。注意:ISAPI_Rewrite使用比封演算法。只有表達式匹配了整個順序串才能獲得匹配結果。例如:
• RewriteCond URL ^/somedir/.* #將匹配任何導向somedir目錄以及它的子目錄的請求,與此同時,
• RewriteCond URL ^/somedir/ #只匹配somedir根目錄的請求。
對「病態」正則表達式的特別提示:
ISAPI_Rewrite 使用了一個很是強大的來自Boost庫的正則表達式引擎。可是它依然有一些侷限性:有着一些「病態」的表達式,它可能會指數級地消耗匹配時間。這些都涉及到嵌套重複運算符,例如試圖對N個連續字母a匹配表達式「(a*a)*b」,消耗的時間將與N2成正比。這些表達式經常能改爲另外一種寫法來避免這種問題。例如,「(a*a)*b」能夠被改寫成「a*b」,解析它消耗的時間與N成正比。在多數狀況下,非嵌套重複表達式消耗的時間與N2成正比,可是,若是條款是相互排斥的,則它們會在線性時間裏完成匹配。在「a*b」這種狀況下,每一個字符將要麼匹配a要麼匹配b或者不匹配。相較之下,「a*a」匹配器不能告知哪一個分支被採起(第一個 a仍是第二個a)所以必須嘗試兩種。
Regex能夠檢測出這種「病態」的正則表達式並終止和它們的匹配。這將使ISAPI_Rewrite的規則失效。當一個規則失效時,ISAPI_Rewrite將給客戶端發送一個"Internal Server error - Rule Failed"的狀態,以表示配置錯誤。

4.1AccessFileName指令

說明 設置分佈式配置文件的名稱
語法 AccessFileName filename [filename] ...
默認值 AccessFileName .htaccess
使用環境 server config

指定一個ISAPI_ReWrite尋求分佈式配置的文件名列表。默認文件名是.htaccess。ISAPI_ReWrite只能載入它能在這個列表中找到的第一個文件。默認狀況下ISAPI_ReWrite管理者會以hidden屬性標記配置文件-它將防止文件被遠程用戶直接訪問到。
若是配置文件進行了任何修改,它將在下次請求服務器時自動加載。

4.2AllowOverride指令

說明 明確規定了每一個目錄重寫的基準URL。
語法 AllowOverride All|None|directive-type [directive-type] ...
默認值 AllowOverride All
使用環境 server config, virtual host, directory

這個指令聲明瞭在分佈式.htaccess文件裏的指令是否能夠覆蓋父級別的httpd.conf中的指令。在ISAPI_Rewrite的使用環境中,這個指令實際上控制了特定虛擬主機或者目錄的.htaccess文件的可用或者不可用。目前只支持三個值:AllNoneFileInfo
AllFileInfo使.htaccess文件以及它裏面的整個ISAPI_Rewrite目錄可用,None使全部的.htaccess文件以及目錄不可用。這些目錄具備繼承性。這意味着若是你爲一些目錄或者虛擬主機指定AllowOverride none,.htaccess文件將對整個子目錄樹不可用。

4.4RewriteRule指令

說明 定義URL重寫規則
語法 RewriteRule Pattern Substitution [flags]
使用環境 server config, virtual host, directory, .htaccess

這個指令定義了單個URL重寫操做。它可能在一個配置文件中出現屢次,每一個實例定義一個重寫URL的規則。RewriteRule指令包含URL匹配模式、替換字符串以及可選的標誌設置。
Pattern(模式)是一個用來匹配當前URL的Perl兼容正則表達式。當前的URL能夠是原來請求的URL或者已經由優先級高的規則替改過的URL。網址從不包含協議或者主機名,從第一個斜槓字符開始(只對httpd.conf文件適用)。並且當前網址還因不一樣的應用配置級別而異。對於目錄級配置(.htaccess文件),結尾的斜線和配置文件的目錄名,會在匹配時被從URL中忽略掉。在建立正則表達式時,請閱讀這個文檔的正則表達式語法部分來獲得更多的信息。
"!"字符打頭的模式將否認整個表達式。否認模式不能產生子匹配,因此你不能使用$N的替代引用。
Substitution(替換)字符串指定了模式是匹配時生成URL的格式字符串。除了純文本,它能夠包括這些特殊字符。
• 對Rewrite模式的回溯引用 $N
• 對Rewrite模式的回溯引用 %N
• 服務器變量 %{VARNAME}
• 條件格式模式 ?Ntrue_string:false_string 
• 分組括號「(」和「)
替換字符串將全部的字符視爲字面值,除了$'、'\'、'('、')','?',':'和'\'。爲了字面化地讀出特殊字符,它定義了用"\"引導的轉義字符。下面的特殊字符是容許的。

$& 輸出匹配的整個表達式。
$` 輸出上一個的匹配結束到當前匹配的開始之間的文本(若是以前沒有找到匹配串,則輸出從開頭到當前匹配的開始之間的文本)。
$' 輸出當前匹配以後跟着的全部文字。
$$ 輸出字面值$
\a 信號鈴字符
\f 表單反饋字符
\n 新行字符
\r 回車符
\t 製表符
\v 垂直製表符
\x 十六進制字符,好比說\x0D.
\x{} 一個可能的Unicode十六進制字符-例如\x{1A0}
\cx ASCII的轉義字符x,例如\c @等價於escape-@。
\e The ASCII 轉義字符
\dd 八進制字符常量,例如\10。
\l 致使下一個字符被小寫輸出。
\u 致使下一個字符被大寫輸出。
\L 致使整個後繼字符串被小寫輸出,直到遇到\E。
\U 致使整個後繼字符串被大寫輸出,直到遇到\E。
\E 結束\L或者\U的後續字符串
\\ 單個反斜槓字符'\'

RewriteRule從父配置文件開始按照在配置文件中出現的次序應用。每一個規則只有在它的Pattern匹配了一個URL並且全部鏈接條件(RewriteCond)都匹配時纔會被應用。在該URL用Substitution完成替換以後,重寫過程還在繼續,一直到配置文件結束或者遇到一個用了任何中止標誌的規則。在Substitution中的特殊字符串"-"(短橫)意味着沒有替換,並且當你須要應用該規則並留下的原始的未被染指過的URL時它是頗有用的。
此外,這裏有一個支持的flag(標誌)列表。這些標識能夠改變規則的表現。與Apache徹底兼容的標誌被標記爲綠色,不支持的標誌被標記爲綠色,只在 ISAPI_Rewrite中被支持的標識被標記成黃色。
CU (Case Upper)
把替換字符串改爲大寫.
CL (Case Lower)
把替換字符串改爲小寫.
chain|C
將當前規則與後一條規則連接起來,後一條規則只有在當前規則被匹配的狀況下才能被執行。連接能夠再後續連接。
cookie|CO=NAME:VAL:domain[:lifetime[:path]]
設置一個有指定字段的cookies頭,並把它和當前請求的響應一塊兒發送到客戶端。
env|E=VAR:VAL
不支持,在UNIX環境中設置一個環境變量,在Windows系統中無心義。
forbidden|F
發送即時403 FORBIDDEN響應到客戶端,中止這個請求的規則處理以及全部其餘的替換處理。
gone|G
發送一個即時401Gone響應到客戶端,中止這個請求的規則處理以及全部其餘的替換過程。
handler|H=Content-handler
不支持,爲請求明確指定了處理處理。在IIS的世界中這是能夠經過重寫請求的文件擴展名來實現。可是沒有從Apache處理到IIS文件擴展名的直接轉換方法。
last|L
中止這裏的重寫處理,再也不應用當前配置文件中的其它規則。在這種狀況下,後代的.htaccess文件依然能被用到。
loop|LP
在一個循環中重複運行當前單個規則直到它的模式以及條件再也不被匹配了。循環次數被限定爲200省得陷入無限循環。
next|N
從當前配置文件開始處重複運行重寫處理。循環次數被限定爲200省得陷入無限循環。
nocase|NC
這個標記使Pattern大小寫不敏感。
noescape|NE
不轉義輸出。在ISAPI_Rewrite默認狀況下,在輸出中會把全部的非ANSI字符編碼爲十六進制數%xx。
nosubreq|NS
這個標識在ISAPI_Rewrite中與在Apache中含義不一樣。精確的轉換是不可能的,但這個標誌可能仍然是有用的。每當配置文件處理完成以後,URL被重寫了,ISAPI_Rewrite將啓動這個新的URL處理過程(與Apache相同)使它能夠應用到另外一個配置文件中。此標識意思是該規則只針對初始用戶的請求執行,不針對已被重寫過的請求執行,以防可能出現的循環。ISAPI_Rewrite限定循環重複次數爲10。
nounicode|NU
若是設置了NU標記,從Unicode轉換爲UTF - 8將不會發生。全部Unicode字符會保持它的%xx格式不變。
O (nOrmalize)
留着用於與ISAPI_Rewrite 2.x兼容。若是使用了RewriteCompatibility2,這個指令在處理以前將URL規範化。規範化包括移除一個URL編碼、錯誤字符,等等。同時URL的規範化將徹底移除它的查詢字符串。若是RewriteCompatibility2 沒有被使用,URL按照默認被規範化(就如同它在mod_rewrite中所作的),此標誌的含義將反轉。
proxy|P
將結果URL強制內部處理爲另外一臺服務器上的目標,並即時傳到遠程服務器上,而且,規則處理在這裏中斷了。遠程服務器的響應將被傳遞迴客戶端。proxy須要您指定完整的URL,由協議、主機名稱等開頭。ISAPI_Rewrite使用ISAPI擴展來處理代理請求。你能夠在代理配置章節中閱讀到更多有關於此的內 容。
passthrough|PT
不支持或者始終支持。在IIS中結果始終傳遞到下一個處理
qsappend|QSA
追加當前查找串的數據到替換串而不是由一個替換字符串取代它。當你須要在保留原來的參數再添加更多的查詢字符串參數時,可使用它。
redirect|R [=code]
強制服務器用重定向指令給客戶端發送一個即時響應,提供一個新的接替位置。能夠選加前綴http://thishost[:thissport]/從而把URL帶到一個可用的絕對形式。若是沒有給出代碼,將使用一個302響應(暫時性移動)。你能夠選擇在3XX系列範圍內指定任何代碼。
skip|S=num
若是當前的規則匹配,強制rewrite引擎跳事後面num個規則。
type|T=MIME-type
強制目標文件的MIME類型轉換成被設定的MIME類型。這可以被用來根據一些條件設置內容類型。
U (Unmangle log)
無損記錄。記錄它原來請求的網址,而不是被重寫的URL。

4.5RewriteCond指令

說明 爲如下的RewriteRule定義一個條件
語法 RewriteCond TestString CondPattern
使用環境 server config, virtual host, directory, .htaccess

該指令爲後面的RewriteRule,RewriteHeader或RewriteProxy指令規定了一個條件。一個規則指令前能夠有一個或多個條件,規則只有在全部條件獲得知足的狀況下才被應用。
TestString附加到純文本能夠包含下列結構。
• 用語法$N回溯引用RewriteRule模式
• 用語法%N回溯引用前面的RewriteCond模式
• 用語法${mapname:key|default}擴展RewriteMap
• 用語法%{HTTP:header}指代HTTP頭值
• 用語法%{NAME_OF_VARIABLE}指代服務器變量
如下是可用的服務器變量列表:

HTTP_USER_AGENT
HTTP_REFERER
HTTP_COOKIE
HTTP_FORWARDED
HTTP_HOST
HTTP_PROXY_CONNECTION
HTTP_ACCEPT
REMOTE_ADDR
REMOTE_HOST
REMOTE_PORT
REMOTE_USER
REMOTE_IDENT
REQUEST_METHOD
SCRIPT_FILENAME
PATH_INFO
QUERY_STRING
AUTH_TYPE
DOCUMENT_ROOT
SERVER_NAME
SERVER_ADDR
SERVER_PORT
SERVER_PROTOCOL
SERVER_SOFTWARE
API_VERSION
THE_REQUEST
REQUEST_URI
REQUEST_FILENAME
HTTPS
TIME_YEAR
TIME_MON
TIME_DAY
TIME_HOUR
TIME_MIN
TIME_SEC
TIME_WDAY
TIME
另外,全部的IIS特有的變量都是支持的。

CondPattern指定一個應用於TestString實例的正則表達式,如下特殊值也支持:
1.在正則表達式前頭加「!」符號指明否認模式。
2.'<CondPattern'將CondPattern做爲一個純字符串按字典順序比較,結果比較大
3.'>CondPattern'按字典順序比較,結果比較小
4.'=CondPattern'按字典順序比較,結果相等
5.'-d' 檢測字符串是否存在目錄。
6.'-f' 檢測字符串是否存在文件。
7.'-s' 檢測字符串是否是一個非零大小的文件。
8.'-l' (連接) 不支持的,始終爲false。
9.'-x' (擁有可執行權限) 不支持的,始終爲true。
10.'-F' (存在的文件,經過子請求) 不支持,和'–f'同樣。
11.'-U' (存在的URL,經過子請求) 不支持的,始終爲false。
下面的標記也是支持的:
'nocase|NC'
這個標記使模式大小寫不敏感。
'ornext|OR' 
這個標記用邏輯或而不是隱含的邏輯與結合子請求RewriteCond指令。
O
留用於ISAPI_Rewrite 2.x的兼容性。在處理前規範化字符串。規範化包括移除一個URL編碼、錯誤字符,等等。同時URL的規範化將徹底移除它的查詢字符串。

4.6RewriteBase指令

說明 爲每一個目錄的重寫設置一個基準的URL
語法 RewriteBase URL-path
默認值 RewriteBase requested-directory-path
使用環境 directory, .htaccess

當RewriteRule指令用於每一個目錄的配置文件(.htaccess)時,它將自動從路徑中剝去本地目錄前綴,只對剩下的部分應用規則。RewriteBase指令容許你爲這些規則精確指定一個基準。好比,哪部分要被剝離。
和Apache的mod_rewrite不一樣,ISAPI_Rewrite的訪問不只僅針對於物理路徑,同時還針對於虛擬路徑,並且能夠自動地選擇正確的基準。因此這個指令只是爲了兼容性緣由而被保留的。
URL-path能夠是相對於根的路徑也能夠是空,空的URL-path意味着規則的基準等同於網站的根目錄。

4.7RewriteProxy指令

說明 代理請求到一個遠程服務器
語法 RewriteProxy Pattern Substitution [flags]
使用環境 server config, virtual host, directory, .htaccess

使結果URL被內部處理爲另外一臺服務器上的目標,並即時傳遞到遠程服務器,今後中斷了規則處理。遠程服務器的響應將被傳遞迴客戶端。代理要求您指定完整的URL,由協議,主機名稱等開頭。ISAPI_Rewrite使用ISAPI擴展來處理代理請求。你能夠在配置代理的章節裏閱讀到更多。
語法和操做符與RewriteRule指令是相同的。可是RewroteProxy指令支持一些額外的標記。
H (preserve Host)
代理模塊在鏈接遠程服務器時將使用隨着源請求一塊兒發送過來的主機頭,若是沒有這個標誌代理服務器則將用主機名和遠程服務器的端口號組成主機頭。
A (Add authentication headers)
容許從代理服務器將一個認證信息傳遞到局域網服務器上,當客戶端認證和代理服務器衝突時它頗有用。服務模塊將對一個請求的服務器變量

AUTH_TYPE,AUTH_USER,LOGON_USER,REMOTE_USER

追加相應的頭

X-ISRW-Proxy-AUTH-TYPE,X-ISRW-Proxy-AUTH-USER,X-ISRW-Proxy-LOGON-USER,X-ISRW-Proxy-REMOTE-USER

到被代理的服務器。
CR (use Credentials)
代理模塊將嘗試用在URL中指定的證書身份驗證登陸遠程服務器,或者用基自己份驗證頭登陸遠程服務器。用了這個標誌,你能夠在一個替換字符串中使用http://user:password@host.com/page語法做爲一個URL。

4.8RewriteHeader指令

說明 重寫任何請求的HTTP頭
語法 RewriteHeader HeaderName: Pattern Substitution [flags]
使用環境 server config, virtual host, directory, .htaccess

這個RewriteHeader指令是RewriteRule指令中的一個很經常使用的變量。並且它被設計用來重寫客戶端的URL部分以及HTTP頭的部分。技術上的RewriteRule指令,至關於RewriteHeaderURL Pattern Substitution [flag]。這個指令可用於在IIS裏更多應用程序的處理以前重寫、建立或者刪除任何客戶端請求的HTTP頭。
HeaderName:指定將被重寫的HTTP頭的名字。
patternSubstitutionflag與RewriteRule指令中都是相同的。

4.9RewriteMap指令

說明 爲一個映射函數值定義一個鍵
語法 RewriteMap MapName MapType:MapSource
使用環境 server config, virtual host, directory, .htaccess

RewriteMap指令被用來定義一個鍵到值的查找功能。當你須要映射大量的值時,它會頗有用的,並且它的速度遠遠快過用規則匹配來作到它。映射功能的性能受映射文件的大小影響微乎其微。有三種類型的映射:
 txt:用一個文本文件映射
 rnd:從多個可選項中產生隨機值
 int:內部函數
MapName是這個映射功能的名字,在RewriteRule命令中被用來指定這個映射。請確保每一個映射用惟一的名稱定義。你可使用如下語法在RewriteRule指令的Substitution參數中調用映射功能

${ MapName : LookupKey | DefaultValue } 

若是這個結構是在Substitution中出現,ISAPI_Rewrite將在映射中查找這個鍵,萬一找到了一個,就用它的值替換這個結構。若是什麼值也沒有被找到,將用可選的DefaultValue。若是沒有指定DefaultValue,它將用一個空串替換。
下面的標誌也是支持的:
‘nocase|NC’
這個標誌使該查找鍵大小寫不敏感。
下面是一個大小寫不敏感映射文件指令的示例

RewriteMap examplemap txt:C:/path/to/file/map.txt [NC]

MapSource文件的路徑,既能夠是絕對地址也能夠是相對地址。相對地址將被從當前配置的文件夾開始推算,換言之,就是從這個定義映射的配置文件的路徑開始推算。
而後你能夠在RewriteRule中以下使用這個映射:

RewriteRule ^/ex/(.*) ${examplemap:$1}

下列MapTypeMapSource的組合是可用的:
txt:純文本映射,它的source是到一個可用的文本文檔的windows文件系統路徑。文本文檔必須是以下格式的:

#This is a commentkey1 value1 #Another commentkey2 value2keyN valueN

rnd:隨機查找多個值。Source是一個文本文檔的路徑,文本文檔必須是如下格式:

#This is a commentkey1 value1|value2|value3key2 value4|value5|value6|valueN

int: 調用內部函數。 Source必須是下列預約義的內部函數之一:
 toupper: 轉換關鍵詞爲大寫形式。
 tolower:轉換關鍵詞爲小寫形式。
 escape:把特定字符編碼爲十六進制。
 unescape:把十六進制值編譯爲特定字符。

4.10RewriteLog指令

說明 設置ISAPI_Rewrite日誌文件的名稱
語法 RewriteLog file-path
默認值 RewriteLog installdir\rewrite.log
使用環境 server config

這個指令用來設定記錄ISAPI_Rewrite動做的日誌文件的文件名。示例:

Rewritelog "C:\local\path\rewrite.log"

4.11RewriteLogLevel指令

說明 設置日誌級別
語法 RewriteLogLevel Level
默認值 RewriteLogLevel 0
使用環境 server config

這個指令設置日誌的輸出長度。默認值0表示不記日誌,而最大的級別9則表示全部的動做都要記錄。
使用使用較高的級別值可能會下降ISAPI_Rewrite的操做速度。咱們建議你當你完成規則調試以後,經過設置日誌級別爲零來禁用日誌。

4.12RewriteOptions指令

說明 指定特殊選項
語法 RewriteOptions Options
使用環境 server config, virtual host, directory, .htaccess

這個指令能夠爲ISAPI_Rewrite設置特定選項。當前只有唯一一個選項可用:inherit
inherit:強迫當前配置從父級繼承全部的選項和規則。這意味着來自父級配置的全部的規則將被再次執行,除非當前環境另有相應重寫規則。

4.13RewriteCompatibility2指令

說明 啓用或禁用ISAPI_Rewrite 2.x兼容模式
語法 RewriteCompatibility2 on|off
默認值 RewriteCompatibility2 off
使用環境 server config, virtual host, directory, .htaccess

這一指令將激活與ISAPI_Rewrite 2.x版的兼容性,將一些2.X的規則正確地翻譯爲3.0版本的語法。這並不意味着ISAPI_Rewrite 3將開始懂得不經修改舊的語法。若是您有針對ISAPI_Rewrite 2.X的舊設計請使用ISAPI_Rewrite提供的翻譯工具將這些舊規則轉化爲新的語法規則。
如今經過設置指令RewriteCompatibility2惟一改變的是,它將關閉網址常規前綴並刪除查詢字符串。 Apache的mod_rewrite將刪除匹配的URL的查詢字符串的這部分,相較之下ISAPI_Rewrite 2.X將匹配整個網址(包括查詢字符串在內),並且[O]標記的意思將由該指令倒置。

4.14ErrorLog指令

說明 通常的錯誤文件的位置
語法 ErrorLog file-path
默認值 ErrorLog installdir\rewrite.log
使用環境 server config

這個指令設置存放ISAPI_Rewrite總體錯誤和消息的日誌文件的名稱。例如httpd.conf file load, .htaccess file load,等等
例:ErrorLog "C:local\path\error.log"

4.15LogLevel指令

說明 設置通常的錯誤的日誌級別
語法 LogLevel Level
默認 LogLevel warn
使用環境 server config

這個指令設置通常日誌的輸出長度,跟它的重寫過程無關。這裏有一個level的可用值列表:emerg、alert、crit、error、warm、notice、info、debug。當前的ISAPI_Rewrite日誌只記錄錯誤信息。
設置LogLevel調試來解決配置文件中加載的問題。

4.16<VirtualHost>指令

說明 把應用於特定IP地或者主機的指令編組
語法 <VirtualHost addr[:port] [addr[:port]] ...> ... </VirtualHost>
使用環境 server config

<VirtualHost> ... </VirtualHost>標籤用來對應用到特定虛擬主機裏的指令進行分組。
addr的可用值爲:
• 特定的IP地址
• 完整的域名
• 字符'*'能夠匹配任何主機或者特定服務器的任何端口號。
例如:

RewriteEngine offAllowOverride none<VirtualHost onesite.com www.onesite.com>RewriteEngine onAllowOverride all</VirtualHost> 

不要忘了在每一個<VirtualHost>標籤中包含RewriteEngine on指令,也不要將不能應用的規則封裝進去。

4.17<Directory>指令

說明 將適用於特定的文件系統的目錄和子目錄的指令編組
語法 <Directory directory-path> ... </Directory>
使用環境 server config, virtual host

<Directory> ... </Directory>標籤被用來對應用到特定文件系統目錄以及子目錄的指令進行分組。通配符?和*是可用的。正則表達式也是可用的,須要以~字符打頭。
對目錄路徑參數必須當心:它們必須字面匹配用來訪問文件的文件系統路徑,用於某一特定<Directory>的指令並不適用於來自同一目錄下經過不一樣的路徑的文件訪問,例如經過不一樣的符號連接。只有完整的文件路徑是被容許使用的。
示例:

<Directory C:/inetpub/>  AllowOverride None</Directory><Directory C:/inetpub/home/>  AllowOverride FileInfo</Directory><Directory ~ "C:/inetpub/wwwroot/.*/[0-9]{3}">  # ... directives here ...</Directory>

不要忘了在每一個<Directory>標籤中包含RewriteEngine on指令,也不要將不能應用的規則封裝進去。

4.18<DirectoryMatch>指令

說明 將適用於特定的文件系統的目錄和子目錄的指令編組
語法 <DirectoryMatch regex> ... </DirectoryMatch>
使用環境 server config, virtual host

<DirectoryMatch> ... </DirectoryMatch> 被用來封裝一個只適用於指定的文件系統的目錄和子目錄的指令組。這個指令和<Directory ~> 語法相同。
示例:

<DirectoryMatch "^/www/(.+/)?[0-9]{3}">   # ... directives here ... </DirectoryMatch> 

不要忘了在每一個< DirectoryMatch>標籤中包含 RewriteEngine on指令,也不要將不能應用的規則封裝進去。

4.19<Files> 指令

說明 將應用於匹配文件名的指令包裝起來
語法 <Files filename> ... </Files>
使用環境 server config, virtual host, directory, .htaccess

<File>指令以文件名限定了封裝的指令的做用域。filename參數必須包含一個文件名,支持?和*以及以~字符打頭的正則表達式。
示例:

<Files index.*>   # ... directives here ... </Files><Files ~ "\.(gif|jpe?g|png)$">   # ... directives here ... </Files>

不要忘了在每一個<Files>標籤中包含RewriteEngine on指令,也不要將不能應用的規則封裝進去。

4.20<FilesMatch>指令

說明 將應用於匹配文件名的指令包裝起來
語法 <FilesMatch regex> ... </FilesMatch>
使用環境 server config, virtual host, directory, .htaccess

<FilesMatch>指令的語法和_指令"><Files ~>語法徹底同樣。

<FilesMatch "\.(gif|jpe?g|png)$"> 

不要忘了在每一個<FilesMatch>標籤中包含RewriteEngine on指令,也不要將不能應用的規則封裝進去。

4.21<Location>指令

說明 把被包裝起來的指令集應用到匹配的URL或者虛擬路徑
語法 <Location URL-path|URL> ... </Location>
使用環境 server config, virtual host

<Location> ... </Location>標籤用來將應用到特定URL或者虛擬路徑的指令分組。<Location>將運算符徹底從文件系統中分劃出來,所以那些指令將不會用來控制對文件文件系統位置的訪問。由於有幾個不一樣的URL可能映射到相同的文件系統位置。
URL-path是一個形式爲「/path/」的虛擬路徑。沒有協議、主機名、端口號、查詢請求字符串被包含在內。URL-path能夠包含通配符?和*或者以~字符打頭的正則表達式。
示例:

<Location /directory>  # ... rules go here</Location><Location />   # ... more rules go here</Location>

不要忘了在每一個<Location>標籤中包含RewriteEngine on指令,也不要將不須要用到的規則封套進去。

4.22<LocationMatch>指令

說明 把被包裝起來的指令集應用到正則表達式匹配的URL上
語法 <LocationMatch regex> ... </LocationMatch>
使用環境 server config, virtual host

這個指令的語法和指令"><Location ~>正則表達式語法徹底同樣。
示例:

<LocationMatch "/(home|section)/bin">   # ... rules go here</LocationMatch> 

不要忘了在每一個<LocationMatch>標籤中包含RewriteEngine on指令,也不要將不能應用的規則封裝進去。

示例

注意:這些示例中全部的規則只適用於httpd.conf文件。在ISAPI_Rewrite以及在Apache的mod_rewrite中,規則的基本路徑是不一樣的,取決於你放置.htaccess文件的目錄。若是你將規則放在httpd.conf裏的話,初始領頭斜線必須存在,而在.htaccess文件中,到這些文件的虛擬路徑會被截斷。規則取決於以RewriteBase /指令引導的根路徑,來容許它們在httpd.conf和目錄級的.htaccess文件的任何位置上運做。
簡單的搜索引擎友好的網址
下面這個例子演示瞭如何輕鬆地使用循環標記藏匿查詢字符串參數。假設你有一個以下的URL: http://www.mysite.com/foo.asp?a=A&b=B&c=C,並且你但願以這樣的地址來訪問它: http://www.myhost.com/foo.asp/a/A/b/B/c/C
請嘗試用下面的規則來達到預期的效果:
RewriteEngine onRewriteRule ^(.*?\.asp)/([^/]*)/([^/]*)(/.+)? $1$4?$2=$3 [NC,LP,QSA]
注意這個規則可能破壞頁面與CSS文件、圖片等的相對連接。至因此這樣是由於在瀏覽器中用於推算完整資源URI的基本路徑(頁面的父文件夾)發生了變化。只有在您使用目錄分隔符做爲替代字符時纔會發生這個問題。有三種可用的解決方案:
1.使用下面的規則,它不影響基本路徑,由於它沒有用到目錄分隔符「/」。
2.藉助於<base href="/folder/">標籤直接爲頁面指定正確的base路徑
3.把全部的頁面相對連接都變成相對於根目錄的地址或者絕對地址形式。
還存在着不少種用了不一樣的分隔符和文件擴展名的規則。例如,使用像這樣的URL:http://www.myhost.com/foo.asp~a~A~b~B~c~C。下面的規則能夠用來實現它:
RewriteEngine onRewriteRule ^(.*?\.asp)~([^~]*)~([^~]*)(.*) $1$4?$2=$3 [NC,LP,QSA]
富關鍵詞URLs
在上面的例子中,咱們使用很通常的技術來簡單地藏匿查詢字符串標記。可是不少對搜索引擎優化頗有用的解決方案是讓您的URL關鍵字豐富。看看下面的網址,例如:http://www.mysite.com/productpage.asp?productID=127這是大部分網站的常見狀況。可是你能夠經過使用這樣形式的連接來顯著地提升你的網頁搜索引擎抓取率:http://www.mysite.com/products/our_super_tool.asp,URL中的關鍵詞「our super tool」會被索引,並提升網頁排名,可是「our_super_tool」不能直接被用來收回productid=127,這個問題存在幾種解決方案。
第一個解決方案,咱們建議你使用簡短、只包含少數幾個參數(既有關鍵詞也有數字標識符)的URL形式,在樣您的URL可能看起來以下:
http://www.mysite.com/products/our_super_tool_127.asp。實現這一重寫目標只須要一個規則:
RewriteEngine onRewriteBase /RewriteRule ^products/[^?/]*_(\d+)\.asp /productpage.asp?productID=$1 [QSA]

另外一個更復雜的解決方案是建立一對一的映射文件,並用它來映射「our_super_tool」到127。該解決方案對一些有不少參數的長URL來講頗有用,並容許你隱藏數字標識符。這URL看起來像是http://www.mysite.com/products/our_super_tool.asp。請注意「our_supper_tool」部分必須是產品的惟一標識,是它的標識符。下面是這種解決方案的一個示例:

RewriteEngine onRewriteBase /RewriteMap mapfile txt:mapfile.txtRewriteRule ^products/([^?/]+)\.asp /productpage.asp?productID=${mapfile:$1}

並且你必需建立包含如下內容的mapfile.txt映射文件:

one_product       1another_product   2our_super_tool    127more_products     335

這種方法的優勢是:你可使用它來組合十分複雜的URL轉換,可是這是一個小例子,是這個指南中的題外之話。
使用IIS做爲反向代理 假設你有運行IIS的互聯網服務器以及幾臺後臺服務器或者應用程序運行在其它平臺或者機器上。這些服務器不能直接在互聯網上閱覽,可是你必須爲他人提供訪問這些服務器的渠道。這裏有一個演示如何簡單地將某個網站的完整內容映射到另外一個運行了ISAPI_Rewrite的站點的文件夾的示例:

RewriteEngine onRewriteBase / RewriteRule mappoint(.+) http://sitedomain$1 [NC,P]

藏匿文件擴展名: 雖然不可能將一個站點的全部的文件的擴展名都藏匿起來,可是咱們可使用ISAPI_Rewrite的文件檢查功能來隱藏某些已知擴展名。這裏有一個藏匿網站上.asp文件擴展名的規則示例:

RewriteEngine on#Redirect extension requests to avoid duplicate contentRewriteRule ^([^?]+)\.asp$ $1 [NC,R=301,L]#Internally add extensions to requestRewriteCond %{REQUEST_FILENAME}.asp -f RewriteRule (.*) $1.asp

仿真基於主機頭的虛擬網站 例如你已經註冊了兩個域名www.site1.comwww.site2.com。如今你可使用同一個物理站建立兩個不一樣的站點了。這裏是一個規則示例:

RewriteEngine on#Fix missing trailing slash char on foldersRewriteRule ^([^.?]+[^.?/])$ $1/ [R,L]#Emulate site1RewriteCond %{HTTP:Host} ^(?:www\.)?site1\.com$RewriteRule (.*) /site1$1 [NC,L,NS]#Emulate site2RewriteCond %{HTTP:Host} ^(?:www\.)?site2\.com$RewriteRule (.*) /site2$1 [NC,L,NS] 

如今只要把你的站點分別放到/site1和/site2目錄下就能夠了。注意www.site1.com和www.site2.com這兩個域名必須在IIS中被映射到這個網站裏,從而使ISAPI_Rewrite能攔截到請求。
或者,你可使用更多通用的規則,從而把任何請求都映射到與請求主機名同名的文件夾裏。

RewriteEngine on#Fix missing trailing slash char on foldersRewriteRule ^([^.?]+[^.?/])$ $1/ [R,L]#Map requests to the foldersRewriteCond %{HTTP:Host} ^(www\.)?(.+)RewriteRule (.*) /%2$1 [NS]

網站的目錄名應該是這樣子的:/somesite1.com,/somesite2.info,等等。
阻斷內聯圖像(阻止盜鏈) 假如你有一些頁面插入了http://www.mysite.com/下的gif圖片。一些其它站點將經過網頁超連接插入這些圖片。這會給你的網站增長不少無用的通信量,並且你但願阻止這種作法。
雖然用ISAPI_Rewrite不能100%地保護圖片不被盜鏈(只有專門的反盜鏈產品才能作到它),你至少能夠在瀏覽器發來HTTP引用頭的時候限制這種狀況。下面的規則可讓你只容許來自同一主機的引用頁或者空地址訪問到這些圖片。

RewriteEngine onRewriteCond %{HTTP:Host}#%{HTTP:Referer} ^([^#]+)#(?!http://\1).+RewriteRule .*\.(?:gif|jpg|png) /block.gif [NC]

重定向非www的版本到www
若是你的網站同時能夠經過兩種形式的URL好比說http://helicontech.com和http://www.helicontech.com來訪問到,那麼最好將一種地址重定向到另外一種地址裏,來避免搜索引擎對重複內容作出的處罰。下面是一個能將全部的非www地址重定向到相應的www地址上去的301重定向規則。

RewriteEngine onRewriteCond %{HTTPS} (on)?RewriteCond %{HTTP:Host} ^(?!www\.)(.+)$ [NC]RewriteCond %{REQUEST_URI} (.+)RewriteRule .? http(?%1s)://www.%2%3 [R=301,L]

強制SSL或者非SSL到一個指定的位置
這裏是一個演示如何將SSL強制轉到指定的文件夾的示例。只要簡單地把下面的規則放到該文件夾下的.htaccess文件裏就能夠了。

RewriteEngine on#Fix missing trailing slash char on foldersRewriteRule ^([^.?]+[^.?/])$ $1/ [R,L]#Redirect non-HTTPS to HTTPSRewriteCond %{HTTP:Host} (.*)RewriteCond %{HTTPS} offRewriteCond %{REQUEST_URI} (.*)RewriteRule .? https://%1%2 [R,L]

而這個示例做用正好相反:將非SSL強制轉到指定文件夾。

RewriteEngine on#Fix missing trailing slash char on foldersRewriteRule ^([^.?]+[^.?/])$ $1/ [R,L]#Redirect HTTPS to non-HTTPSRewriteCond %{HTTP:Host} (.*)RewriteCond %{HTTPS} onRewriteCond %{REQUEST_URI} (.*)RewriteRule .? http://%1%2 [R,L]

轉移站點位置
當你把網站從一個域名移到另外一個域名,或者從一個文件夾移動另外一個文件夾裏的時候,這是常常會遇到的問題。你但願將一個網站的全部請求重定向到另外一個網站裏,並且不丟失請求資源名以及參數。當你但願保留現有的網頁的排名和外連接的時候,它是很是有用的。這個解決方案是在舊的網站服務器上使用ISAPI_Rewrite:

RewriteEngine on#Permanent redirect to update old linksRewriteRule (.+) http://newserver.com$1 [R=301,L]

平衡負荷仿真
這個示例模擬某種DNS輪換負荷平衡技術。假設你有主站www.mysite.com和數臺web服務器分別註冊爲www[1-9].mysite.com。若是你在主服務器上安裝了ISAPI_Rewrite,你能夠將初始的客戶端請求重定向到幾臺特定服務器,從而在幾臺服務器之間隨機攤開通信量。一旦已重定向,客戶端將一直使用這一臺服務器。雖然這種解決方案並不很是理想,可是它確實能分攤你的通信量並避免在維護會話狀態方面發生的問題。
使用下面的規則來重定向客戶端:

RewriteEngine onRewriteMap hosts rnd:hosts.txtRewriteCond %{HTTP:Host} (www)\.mysite.com [NC]RewriteRule (.*) http://${hosts:%1}.mysite.com$1 [R,L]

下面是hosts.txt文件的內容

www www1|www2|www3|www4|www5|www6|www7|www8|www9

你還能夠在Apeche文檔裏找到不少其它有用的例子。它們多數不須要修改就能夠在ISAPI_Rewrite3裏使用。

故障處理

Chapter 6故障處理
在這裏你能夠一步步找到你在安裝ISAPI時遇到的問題的解決方法。
1.首先要正確解決您的問題,咱們須要你運行最新的可用版本的ISAPI_Rewrite軟件。你能夠隨時到咱們的網站下載最新版的軟件來升級你的ISAPI_Rewrite。地址是 http://www.helicontech.com/download-isapi_rewrite3.htm  。
2.多數運行ISAPI_Rewrite的問題發生在服務器上NTFS權限限制上。因此,請先閱讀須要運行ISAPI_Rewrite文件的權限。
3.請檢查應用程序和系統日誌中的錯誤信息。這可能指出您的錯誤緣由。
4.不要忘記設置RewriteEngine on指令在你所用的每一個配置文件中。
5.把下列代碼行放到httpd.conf文件中:
RewriteLogLevel 9LogLevel debug
它將建立error.log和rewrite.log兩個日誌文件,默認放在安裝目錄下。若是日誌文件被建立了,它代表ISAPI_Rewrite正在運行。閱讀做爲結果的error.log和rewrite.log文件,將能告訴你一些問題的根源線索。
6.若是httpd.conf規則正在生效,可是.htaccess文件卻沒有載入,請再次檢查.htaccess文件的NTFS權限,並確保你沒有在使用ISAPI_Rewrite的精簡版。
7.若是規則在httpd.conf裏能生效,可是有其它部分或者.htaccess文件裏不能生效,請確保在每一個部分的或者.htaccess文件裏包含RewriteEngine on指令。一樣的,不要忘掉.htaccess文件裏的默認rewriting base值與httpd.conf是不一樣的。在.htaccess文件裏或者<Directory>部分裏,ISAPI_Rewrite會自動從路徑中剝離本地目錄前綴並只對剩下的部分應用規則。因此若是你的規則以「/」字符開頭的話,在網站根目錄的.htaccess文件中它必須被去掉。
若是你在使用ISAPI_Rewrite時依然有問題,請到技術支持論壇裏來寫下你的問題,或者發送電子郵件到技術支持郵箱裏。
請在您的支持請求裏包括如下信息:
1.您的ISAPI_Rewrite配置文件,包括路徑和文件名。
2.您的網站的地址連接。
3.你用到測試你的規則的URL。
4.與失敗的請求error.log和rewrite.log的文件副本。
5.包括失敗的請求的部分IIS日誌文件。
請記住你提供的信息越多,咱們越容易爲你解決問題。這樣你更有機會快速地獲得解決方案。

ISAPI_Rewrite 發佈歷史
發佈 3.1.0.67
================
[篩選器功能] 加強映射文件的動態加載
[代理幫助文件錯誤]若是後端不設置內容長度頭的話,並不會返回全部的響應。
發佈 3.1.0.66
================

精簡版的限制
ISAPI_Rewrite的精簡版擁有相同的引擎和重寫功能。可是也有下面這些限制:
? 不支持分佈式.htaccess配置、目錄以及網站級配置,只有一個精簡版安裝目錄中的全局的httpd.conf配置能被載入。
? 不支持<VirtualHost>、<Directory>、<DirectoryMatch>、<Files>、<FilesMatch>、<Location> 以及<LocationMatch>這幾個標籤。
? 精簡版中沒有代理服務模塊,於是全部的和代理服務功能相關的好比說RewriteProxy指令以及[P]標記都會被忽略。
? 精簡版沒有針對於虛擬主機環境的手工安裝包
ISAPI_Rewrite精簡版徹底免費,它對開發或者測試目的以及只有幾個網站並且不須要分佈式配置或者代理功能的小型服務器來講是一個很好的解決方案

技術信息 ISAPI_Rewrite由四個部分組成:ISAPI篩選器、ISAPI擴展幫助、GUI管理器以及MMC嵌入式管理單元擴展。ISAPI_Rewrite篩選器和擴展都是用純C++語言寫的快速DLL模塊。當安裝ISAPI_Rwrite的時候, MMC嵌入式管理單元會被自動註冊。ISAPI篩選器將安裝在一個全局級別上,你不須要手工註冊它。ISAPI擴展也會被安裝並註冊。
ISAPI_Rewrite管理器實用工具能夠在沒有安裝MMC的系統中運行ISAPI_Rewrite MMC嵌入式管理單元。
Windows Vista以及Windows Server 2008系統中的ISAPI_Rewrite管理器實用工具(Helicon Manager.exe)要求管理員權限來執行,由於較小權限的用戶沒有權力讀取IIS管理元庫,而它對顯示網站配置來講是必需的。若是用受限的賬號運行ISAPI_Rewrite管理器,你會獲得登陸管理員賬號的自動提示。
ISAPI_Rewrite篩選器已經有足夠地快,所以不用擔憂它的性能。除非你的服務器運行在最大負荷之下。用戶在響應時間或者CPU負荷方面幾乎不能發現什麼區別,可是若是用了不少的規則的話,服務器最大帶寬可能掉下一點來。因此請注意你用的配置決定了性能。建議每一個網站使用的規則不要超過100條。在多數狀況下,能夠利用RewriteMap來避免使用大量的規則。
該程序使用了Regex++ 庫。
Regex++ (Version Boost 1.31)
Copyright ?1998-2004, Dr John Maddock

使用和傳播許可該使用許可覆蓋了全部的現有版本的ISAPI_Rewite,包括ISAPI_Rewrite、ISAPI_Rewrite徹底版、ISAPI_Rewrite精簡版、ISAPI_Rewrite測試版,後面統稱爲ISAPI_Rewrite除非另有指明。1.全部未明確授予的權利均由Helicon Tech保留。2.全部的關於ISAPI_Rewrite的版權都由它的做者Helicon Tech獨家保留。3. Helicon Tech准予無償使用ISAPI_Rewrite精簡版產品。4. Helicon Tech准予免費試用ISAPI_Rewrite產品30天,當試用期結束時,請要麼購買ISAPI_Rewrite,要麼刪除ISAPI_Rewrite產品。5.未註冊過的ISAPI_Rewrite試用版,能夠在不被改動的前提下自由傳播,除非有下例狀況。任何我的或者公司都不用爲在未得版權持有人書面許可的狀況下傳播ISAPI_Rewrite而付費。未經版權持有者的書面許可,未註冊的試用版ISAPI_Rewrite不容許捆綁其它安裝包。6. ISAPI_Rewrite必須被原樣傳播,不提供任何形式的保證實示或暗示。你能夠在你本身的磁盤上使用ISAPI_Rewrite。做者不爲由於濫用本軟件致使的數據丟失、損壞,或任何其餘類型的損失承擔責任。7.你不得使用、複製、模仿、克隆、出租、出售、修改、反編譯、反彙編以及其它任何反向工程,或者轉讓許可程序,或者任何許可程序的一個子集,除非本協議有提供。任何未經受權的使用將致使本許可自動終止。並可能致使刑事或民事起訴。8.本許可協議的條款是在將來版本的ISAPI_Rewrite將會有所變化。9.當你購買ISAPI_Rewrite時,將發給你「註冊碼」。這種「註冊碼」能夠我的或者公司購買,並只在一臺計算機上使用。若是您購買一個以上的ISAPI_Rewrite副本,發給大家的「註冊碼」只能在等於你購買的許可證數的計算機上使用。10.您只能使用來自Helicom Tech以及與Helicom Tech有業務合做或者技術合做的公司的註冊碼。11. 安裝和使用ISAPI_Rewrite意味着接受這些條款及許可條件。12. 若是您不一樣意本許可證的條款或違反本許可與您當地的法律規定,您必須從您的存儲設備中刪除ISAPI_Rewrite文件,並中止使用該產品。13.咱們堅持嚴格的隱私的準則,不會收集我的識別信息,除非是自願提供的。若是您有進一步的問題或意見,請訪問咱們的http://www.helicontech.com。感謝你使用ISAPI_Rewrite。Helicon Tech Corporation.

相關文章
相關標籤/搜索