IIS ISAPI_Rewrite組件的安裝,反安裝,配置詳解教程

ISAPI_Rewrite 是一款適用於IIS的功能強大的基於正則表達式的URL處理模塊。它兼容Apache的mod_rewrite的語法,從而使僅僅複製.htaccess文件就把配置從appach移植到IIS中或者從IIS移值到appach中變成可能。第一章:軟體介紹 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精簡版是免費的。在這裡可以看到受限的細節說明。 大宗採購可議折扣。 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 擴展 2.2安裝程序 在運行安裝包之前請先閱讀系統要求部分。下載並安裝某個版本的ISAPI_Rewrite.msi,依照安裝嚮導的說明操作。安裝過程是自動的,並有自我描述。ISAPI_Rewrite在自動安裝過程中必須重啟IIS。下列服務必須被重啟:IISADMIN、W3SVC。不需要手工把任何ISAPI篩選器或者擴展加入到網站或者全局列表中。它能夠在安裝和配置過程中自動完成。 命令行安裝 ISAPI_Rewrite也能夠通過命令行進行後台安裝。請使用以下命令行語法來安裝: 複製代碼 代碼如下:msiexec /i ISAPI_Rewrite3.msi /qn AcceptEULA=Yes REGISTRATIONCODE=Code REGISTRATIONNAME=Name 用命令行來後台反安裝ISAPI_Rewrite請使用下面的語法: 複製代碼 代碼如下:msiexec /x ISAPI_Rewrite3.msi /qn KEEPUSERFILES=Yes2.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 name RegistrationCode=REG-CODE-PROVIDED-FROM-HELICON依照「運行ISAPI_Rewrite的許可權需求」這一部分的說明來檢查文件系統許可權。 2.4反安裝反安裝程序會刪除所有安裝程序所生成的文件、從管理元庫中註銷篩選器,並刪除所有由安裝程序所添加的其它管理元庫變化。如果用戶決定在反安裝過程中保留用戶文件的話,下列用戶數據文件在反安裝後會被留下來。

文件名 說明
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=Yes2.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應用程序的屬性中給予一個「純腳本」的執行許可權。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_Rewrite3IIS:/LM/W3SVC/Filters/FilterLoadOrder append "ISAPI_Rewrite3"使用一個可執行文件(dll)發生在:安裝。
RemoveFilterFromMetabase從管理元庫中刪除篩選器 這個行為從IIS管理元庫里移除了名為ISAPI_Rewrite3的全局ISAPI篩選器。IIS5, IIS6 管理元庫: IIS://localhost/W3SVC/LM/W3SVC/Filters/ delete key ISAPI_Rewrite3IIS:/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_Rewrite3httpd.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%System32inetsrvisapi.dll" /> <add name="IsapiFilterModule" image="%windir%System32inetsrvfilter.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 FilesHeliconISAPI_Rewrite3ISAPI_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 FilesHeliconISAPI_Rewrite3ISAPI_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 FilesHeliconISAPI_Rewrite3ISAPI_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 FilesHeliconISAPI_Rewrite3ISAPI_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:ProgramFilesHeliconISAPI_Rewrite3ISAPI_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:ProgramFilesHeliconISAPI_Rewrite3ISAPI_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*/tagnames*>"在這種情況下$1將包含標籤對之間的文本,而且是最短的匹配字元串。插入成份插入成分有兩個用處——把項目編組到子表達式中,並且對生成的匹配標號。例如,表達式"(ab)*"將匹配所有的這類字元串"ababab"。所有的被插入成份標號的子匹配將可以用N或者$N語法來回溯引用到。它允許子表達式匹配空字元串,子表達式以1為開始從左往右編號。子表達式0就是整個表達式。正則表達式無標記插入有時候你需要把子表達式編組為插入成份,但是不想為這個插入成分而吐出另一個標記的子表達式。在這種情況下,一個非標記插入(?:)可能有用。例如,下例表達式可以創建一個非子表達式:"(?: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"匹配詞語中的空字元串。轉義字元轉義字元「」含有多重意義: 轉義字元可以引導一個運算符,例如:回溯引用、詞操作符 轉義字元可以使下面的字元正常,比如說「*」代表一個字面值「*」,而不是重複運算符。

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

轉義序列 字元代碼 含義
a 0x07 信號鈴記號.
0x09 製表符
v 0x0B 垂直製表符
e 0x1B ASCII轉義字元
dd 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組合字元序列,例如「ax0301」(字元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文件的可用或者不可用。目前只支持三個值:AllNoneFileInfoAllFileInfo使.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 表單反饋字元
新行字元
回車符
製表符
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_AGENTHTTP_REFERERHTTP_COOKIEHTTP_FORWARDEDHTTP_HOSTHTTP_PROXY_CONNECTIONHTTP_ACCEPTREMOTE_ADDRREMOTE_HOSTREMOTE_PORTREMOTE_USERREMOTE_IDENTREQUEST_METHODSCRIPT_FILENAMEPATH_INFOQUERY_STRINGAUTH_TYPE DOCUMENT_ROOTSERVER_NAMESERVER_ADDRSERVER_PORTSERVER_PROTOCOLSERVER_SOFTWAREAPI_VERSIONTHE_REQUESTREQUEST_URIREQUEST_FILENAMEHTTPS TIME_YEARTIME_MONTIME_DAYTIME_HOURTIME_MINTIME_SECTIME_WDAYTIME另外,所有的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
ewrite.log
使用環境 server config

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

Rewritelog "C:localpath
ewrite.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設置特定選項。當前只有惟一一個選項可用:inheritinherit:強迫當前配置從父級繼承所有的選項和規則。這意味著來自父級配置的所有的規則將被再次執行,除非當前環境另有相應重寫規則。

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
ewrite.log
使用環境 server config

這個指令設置存放ISAPI_Rewrite整體錯誤和消息的日誌文件的名稱。例如httpd.conf file load, .htaccess file load,等等例:ErrorLog "C:localpatherror.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.

推薦閱讀:

10節課教會你攝影
圍巾披肩鉤針編織教程圖解,簡單好學,一天就能換一條新圍巾!
初秋外穿超漂亮!女士棒針燈籠袖白色鏤空毛衣(附教程)
拼布包嵌繩的製作教程
變形爆米花中長針教程

TAG:教程 | 配置 | 組件 | 安裝 |