ISAPI_Rewrite是一個(gè)功能強(qiáng)大的網(wǎng)址操縱發(fā)動(dòng)機(jī)的基礎(chǔ)上正則表達(dá)式。它的行為是像Apache的mod_Rewrite ,但專為微軟的Internet信息服務(wù)( IIS ) 。 ISAPI_Rewrite是一個(gè)ISAPI篩選器的書面純的C / C + +所以速度極快。 ISAPI_Rewrite讓您的自由,超出標(biāo)準(zhǔn)網(wǎng)址計(jì)劃和發(fā)展自己的計(jì)劃。
第一章:軟件介紹
ISAPI_Rewrite 是一款適用于IIS的功能強(qiáng)大的基于正則表達(dá)式的URL處理模塊。它兼容Apache的mod_rewrite的語法,從而使僅僅復(fù)制.htaccess文件就把配置從appach移植到IIS中或者從IIS移值到appach中變成可能。請參閱3.2兼容性圖表這一節(jié)。
ISAPI_Rewrite最重要的功能:
? ISAPI_Rewrite提供了和Apach mod_rewrite相同的句法和行為,使僅僅拷貝.htaccess文件就完成配置移植成為功能。(要想閱讀更多關(guān)于與mod_rewrite的兼容性,請參閱3.2兼容性圖表這一節(jié)。)
? 正則表達(dá)式支持靈活而強(qiáng)大的配置。
? 極速而且容易升級的純C++代碼。
? 真正的分布式配置:實(shí)時(shí)監(jiān)控服務(wù)器全局級別、虛擬主機(jī)(網(wǎng)站)級別、目錄級別的.htaccess文件。
? 隔離性:用戶級配置只影響本地用戶環(huán)境,從而使ISAPI_Rewrite成為Web主機(jī)提供商的理想解決方案。
重要的應(yīng)用示例:
? 搜索引擎優(yōu)化。
? 一臺(tái)Web服務(wù)器的代理內(nèi)容經(jīng)過另一臺(tái)web服務(wù)器。
? 防止內(nèi)容被吸血(盜鏈)。
? 阻斷特定主機(jī)、反向鏈接或者煩人的搜索機(jī)器人。
? 內(nèi)容商議:向不同的語言用戶或者不同的瀏覽器用戶提供不同的文件。示例
? 為群集式服務(wù)器架構(gòu)模擬負(fù)載均衡。
定價(jià)資料
? 45天的試用期
? 單機(jī)版99美元
? ISAPI_Rewrite精簡版是免費(fèi)的。在這里可以看到受限的細(xì)節(jié)說明。
? 大宗采購可議折扣。
2.1系統(tǒng)要求
ISAPI_Rewrite可以被安裝在下列操作系統(tǒng)中:
? 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之前,操作系統(tǒng)中必須先安裝IIS。
32位和64位的Windows版本都是支持的,但是你必須下載32位版和64位版兩種不同的安裝包。Windows Installer 2.0必須運(yùn)行安裝程序。你可以從微軟的網(wǎng)站上下載到最新版本的Windows Installer。
在Windows Vista和Windows Server 2008上安裝ISAPI_Rewrite,還必須先安裝下面兩個(gè)模塊(默認(rèn)情況下這兩個(gè)模塊是不安裝的)
? ISAPI過濾器
? ISAPI 擴(kuò)展
2.2安裝程序
在運(yùn)行安裝包之前請先閱讀系統(tǒng)要求部分。下載并安裝某個(gè)版本的ISAPI_Rewrite.msi,依照安裝向?qū)У恼f明操作。安裝過程是自動(dòng)的,并有自我描述。ISAPI_Rewrite在自動(dòng)安裝過程中必須重啟IIS。下列服務(wù)必須被重啟:IISADMIN、W3SVC。不需要手工把任何ISAPI篩選器或者擴(kuò)展加入到網(wǎng)站或者全局列表中。它能夠在安裝和配置過程中自動(dòng)完成。
命令行安裝
ISAPI_Rewrite也能夠通過命令行進(jìn)行后臺(tái)安裝。請使用以下命令行語法來安裝:
msiexec /i ISAPI_Rewrite3.msi /qn AcceptEULA=Yes REGISTRATIONCODE=Code REGISTRATIONNAME=Name
用命令行來后臺(tái)反安裝ISAPI_Rewrite請使用下面的語法:
msiexec /x ISAPI_Rewrite3.msi /qn KEEPUSERFILES=Yes
2.3手工安裝
要手工安裝ISAPI_Rewrite的話,你必須下載不同的手工安裝包包含所有必須的文件。ISAPI_Rewrite精簡版不支持手工安裝。你可以安裝全部功能或者僅僅安裝它們中的一部分。
手工安裝包包含下列文件:
? ISAPI_Rewrite.dll - 這是ISAPI篩選器本身。
? ISAPI_RewriteProxy.dll - 這是為代理操作的ISAPI擴(kuò)展模塊必不可少的。
? license.rtf - EULA的產(chǎn)品許可證。
? ISAPI_Rewrite.chm - .文檔文件。
? httpd.conf - 全局配置文件示例。
安裝ISAPI_Rewrite,首先你必須在你在IIS系統(tǒng)中注冊ISAPI_Rewrite.dll作為ISAPI篩選器。按默認(rèn)ISAPI_Rewrite.dll文件是用來作為全局ISAPI篩選器的。而且它還能夠被安裝到某個(gè)特定的網(wǎng)站里,你需要記住在同一時(shí)間段里只有一個(gè)ISAPI_Rewrite.dll實(shí)例能夠加載到一個(gè)IIS工作進(jìn)程里,這意味著如果你決定把ISAPI_Rewrite的ISAPI篩選器單獨(dú)地安裝到每個(gè)站點(diǎn)里的話,你必須把這些站點(diǎn)切換高隔離模式,從而為這些網(wǎng)站產(chǎn)生獨(dú)立的工作進(jìn)程。如果你需要在每個(gè)站點(diǎn)上分別安裝ISAPI_Rewrite,我們通常會(huì)建議改為在整個(gè)IIS上全局地安裝它。
在Window 2000,Window XP 和Windows Server 2003中注冊ISAPI 篩選器,無論是整個(gè)IIS服務(wù)器要用它還是個(gè)別WEB網(wǎng)站要用它,都要用IIS 的MMC管理單元來把ISAPI_Rewrite.dll添到ISAPI篩選器列表。在Windows Vista和Windows Server 2008中首先你需要安裝可選IIS組件:萬維網(wǎng)服務(wù)、應(yīng)用程序開發(fā)功能、ISAPI篩選器。
如果你需要代理服務(wù)器功能,你還需要將ISAPI_RewriteProxy.dll注冊為ISAPI擴(kuò)展來侍服文件擴(kuò)展名“*. rwhlp”。在不同的IIS版本中要求不同的操作。請參閱你管理的IIS版本的文檔來了解如何注冊一個(gè)新的ISAPI擴(kuò)展并把它映射到IIS系統(tǒng)的文件擴(kuò)展名上。在Windows Vista和windows server 2008首先必須安裝可選的IIS組件:萬組網(wǎng)服務(wù)、應(yīng)用程序開發(fā)功能、ISAPI篩選器。使用短路徑名(8.3模式)作為ISAPI_RewriteProxy.dll的模塊路徑,如果路徑里有一個(gè)空格字符,IIS載入這個(gè)模塊時(shí)將失敗。
把httpd.conf文件放在ISAPI_Rewrite.dll文件的同一目錄下并編輯它。
把下列兩行內(nèi)容放到httpd.conf文件中以注冊ISAPI_Rewrite 產(chǎn)品:
RegistrationName=Your registration name RegistrationCode=REG-CODE-PROVIDED-FROM-HELICON
依照“運(yùn)行ISAPI_Rewrite的權(quán)限需求”這一部分的說明來檢查文件系統(tǒng)權(quán)限。
2.4反安裝
反安裝程序會(huì)刪除所有安裝程序所生成的文件、從管理元庫中注銷篩選器,并刪除所有由安裝程序所添加的其它管理元庫變化。如果用戶決定在反安裝過程中保留用戶文件的話,下列用戶數(shù)據(jù)文件在反安裝后會(huì)被留下來。
文件名 | 說明 |
Program Files/Helicon/ISAPI_Rewrite/httpd.conf | 用戶規(guī)則的主配置文件 |
Program Files/Helicon/ISAPI_Rewrite/error.log | 包含錯(cuò)誤日志的文件 |
Program Files/Helicon/ISAPI_Rewrite/rewrite.log | 包含重寫日志的文件 |
.htaccess (various folders) | 用戶創(chuàng)建的含有規(guī)則的配置文件 |
“刪除用戶創(chuàng)建的文件”的選項(xiàng)在將反安裝過程中提供給用戶。如果啟用這個(gè)選項(xiàng)則卸載程序也將刪除位于Program Files文件夾里用戶創(chuàng)建的文件。 .htaccess文件不會(huì)被刪除。
要用命令行后臺(tái)卸載ISAPI_Rewrite,請使用下面的語法:
msiexec /x ISAPI_Rewrite3.msi /qn KEEPUSERFILES=Yes
2.5運(yùn)行ISAPI_Rewrite所需的權(quán)限
在一個(gè)干凈的默認(rèn)Windows系統(tǒng)上自動(dòng)安裝ISAPI_Rewrite不要求任何權(quán)限調(diào)整。但是一些其它產(chǎn)品比如說Plesk、IIS鎖定工具的安裝,等等,可能收緊服務(wù)器的安全性,并妨礙ISAPI_Rewrite的正常運(yùn)行。下面是ISAPI_Rewrite的權(quán)限需求的列表單子:
在Windows 2000、Windows XP和Windows 2003的IIS5兼容模式下,篩選器運(yùn)行在System帳戶下的inetinfo.exe進(jìn)程中。那個(gè)system帳戶至少得被授予放置ISAPI_Rewrite安裝文件的那個(gè)文件夾的“讀取”和“目錄瀏覽”的權(quán)限。我們還建議給予system帳號(hào)對這個(gè)文件夾的一般修改權(quán)。這將允許生成一些包含解析或者其它錯(cuò)誤的文件。system帳號(hào)還必須在任何包含了.htaccess文件的網(wǎng)站文件夾里同樣被授予這些權(quán)限,否則ISAPI_Rewrite將不能加載并監(jiān)視它。
請稍留意ISAPI_Rewrite安裝目錄上的任何一點(diǎn)拒絕權(quán)限設(shè)置,因?yàn)樵赪indows 操作系統(tǒng)中,拒絕權(quán)限優(yōu)先于任何允許權(quán)限記錄。
在Windows 2003的天然IIS模式(WPI模式)以及Windows Server 2008中,無論是篩選器還是代理服務(wù)都運(yùn)行在每個(gè)網(wǎng)站相應(yīng)的運(yùn)行程序池的w3p.exe工作進(jìn)程中,每個(gè)應(yīng)用程序池都可以使用它自己的定制來配置,這可能使權(quán)限設(shè)置成了一種復(fù)雜的工作。然而,在一個(gè)正確的IIS配置中,每個(gè)使用中的定制必須是IIS_WPG組的一個(gè)成員。因此,IIS_WPG組可以被用來代替System帳號(hào)去分配前面所寫的權(quán)限需求。
在Windows Vista 中權(quán)限配置是和Windows 2003的配置差不多的,只是它沒有IIW_WPG組。所以,所有的WPI帳號(hào)(一般Network Service是它的惟一帳號(hào))都必須授予上述必需權(quán)限。
此外,為了讓代理服務(wù)功能能工作,你必須在網(wǎng)站屬性或者運(yùn)行代理服務(wù)的web應(yīng)用程序的屬性中給予一個(gè)“純腳本”的執(zhí)行權(quán)限。
2.6MSI的自定義行為自定義行為
自定義行為 | 說明 |
WiseAltStartup 自動(dòng)智能啟動(dòng) |
為運(yùn)行在延時(shí)模式中的自定義行為保存屬性的當(dāng)前狀態(tài)。 使用一個(gè)可執(zhí)行文件(dll) 發(fā)生在:安裝、反安裝。 |
WiseCleanup 智能清理 |
這個(gè)行為被調(diào)用來清理上一個(gè)自定義行為所遺留下的臨時(shí)文件 使用一個(gè)可執(zhí)行文件(dll) 發(fā)生在:安裝、反安裝。 |
WiseStartup 智能啟動(dòng) |
這個(gè)行為使調(diào)用一個(gè).dll文件或者提取必要Wisescript.exe文件和.dll文件的行為可以傳遞參數(shù)。 使用一個(gè)可執(zhí)行文件(dll) 發(fā)生在: 安裝、反安裝 |
WiseUpgradeCheck 智能可選擇地升級 |
這個(gè)行為被調(diào)用來解決當(dāng)Windows安裝程序運(yùn)行時(shí)不檢測應(yīng)用程序的早期版本的問題。 使用一個(gè)可執(zhí)行文件(dll) 發(fā)生在:安裝。 |
WiseUpgradeCheckEx 智能預(yù)選升級 |
添加這個(gè)行為用來解決當(dāng)Windows安裝程序運(yùn)行時(shí)不檢測應(yīng)用程序的早期版本的問題。 使用一個(gè)可執(zhí)行文件(dll) 發(fā)生在:安裝。 |
WiseGetIISVersion 智能獲得IIS版本 |
對主要的IIS版本設(shè)置屬性(IISVERSION). 使用一個(gè)可執(zhí)行文件(dll) 發(fā)生在:安裝。 |
RegisterFilterInMetabase 在管理元庫中注冊篩選器 |
這個(gè)行為添加一個(gè)命名為ISAPI_Rewrite3的全局ISAPI篩選器到IIS管理元庫里 IIS5, IIS6 管理元庫: IIS:/LM/W3SVC/Filters/ add key ISAPI_Rewrite3 IIS:/LM/W3SVC/Filters/FilterLoadOrder append "ISAPI_Rewrite3" 使用一個(gè)可執(zhí)行文件(dll) 發(fā)生在:安裝。 |
RemoveFilterFromMetabase 從管理元庫中刪除篩選器 |
這個(gè)行為從IIS管理元庫里移除了名為ISAPI_Rewrite3的全局ISAPI篩選器。 IIS5, IIS6 管理元庫: IIS://localhost/W3SVC/LM/W3SVC/Filters/ delete key ISAPI_Rewrite3 IIS:/LM/W3SVC/Filters/FilterLoadOrder remove"ISAPI_Rewrite3" 使用一個(gè)可執(zhí)行文件(dll) 發(fā)生在:反安裝、回滾。 |
AddApplicationExtension 添加應(yīng)用程序擴(kuò)展 |
只用于Windows 2003機(jī)器添加ISAPI_RewriteProxy.dll到ISAPI擴(kuò)展中,并使Web服務(wù)器擴(kuò)展名列表中的這個(gè)ISAPI擴(kuò)展名可用。 IIS6管理元庫: IIS:/LM/W3SVC/ adds entry to the在管理元庫屬性 WebSvcExtRestrictionList中增加metabase property "ISAPI_Rewrite3 proxy"條目; 在管理元庫屬性 ApplicationDependencies 增加"ISAPI_Rewrite3 proxy;ISAPI_Rewrite3"條目; 使用一個(gè)可執(zhí)行文件(dll) 發(fā)生在:安裝。 |
RemoveApplicationExtension 刪除應(yīng)用程序擴(kuò)展 |
只用于Windows 2003從ISAPI擴(kuò)展中刪除ISAPI_RewriteProxy.dll,并從web服務(wù)器擴(kuò)展名列表中刪除這個(gè)ISAPI擴(kuò)展名。 IIS6管理元庫: IIS:/LM/W3SVC/ 1.從管理元庫屬性 WebSvcExtRestrictionList 中刪除"ISAPI_Rewrite3 proxy"條目; 2.從管理元庫屬性 ApplicationDependencies中刪除"ISAPI_Rewrite3 proxy;ISAPI_Rewrite3"條目; 使用一個(gè)可執(zhí)行文件(dll) 發(fā)生在:反安裝、回滾。 |
RegisterExtensionInScriptMap 在腳本映射中注冊擴(kuò)展 |
在IIS管理員庫中將ISAPI_RewriteProxy.dl注冊為ISAPI擴(kuò)展來處理*.rwhlp文件擴(kuò)展名 IIS5,IIS6管理元庫: IIS://LM/W3SVC/ 使用一個(gè)可執(zhí)行文件(dll) 發(fā)生在:安裝。 |
RemoveExtensionFromScriptMap 從腳本映射中刪除擴(kuò)展 |
從IIS管理元庫中移除作為ISAPI擴(kuò)展、用于處理*.rwhlp文件擴(kuò)展名的ISAPI_Rewrite.dll的注冊信息 IIS5, IIS6管理元庫: IIS://LM/W3SVC/ 使用一個(gè)可執(zhí)行文件(dll) 發(fā)生在:反安裝、回滾。 |
GetServisesStatus 獲得服務(wù)狀態(tài) |
保存IISADMIN、W2WC、NNTP、SMTP 和FTP 服務(wù)的當(dāng)前狀態(tài) 創(chuàng)建msi屬性: [SERVICES_STATUS] 使用一個(gè)可執(zhí)行文件(dll) 發(fā)生在: 安裝、反安裝。 |
StartServicesEx 按預(yù)設(shè)開啟服務(wù) |
根據(jù)狀態(tài)預(yù)設(shè)來啟動(dòng)ISADMIN、W2WC、NNTP、 SMTP 和 FTP 服務(wù) 使用msi 屬性: [SERVICES_STATUS] 使用一個(gè)可執(zhí)行文件(dll) 發(fā)生在: 安裝、反安裝。 |
SaveProductID 保存產(chǎn)品ID |
如果要注冊產(chǎn)品的話,保存REGISTRATIONNAME和REGISTRATIONCODE的屬性值 使用msi 屬性: [REGISTRATIONNAME] , [REGISTRATIONCODE]; 使用文件: [INSTALLDIR]\ISAPI_Rewrite3\httpd.conf 使用一個(gè)可執(zhí)行文件(dll) 發(fā)生在: 安裝。 |
Check32bitMode 檢測32位模式 |
在64位系統(tǒng)中檢查32位IIS兼容模式是否可用,從而安裝正確的ISAPI篩選器版本。IIS6, IIS7 使用管理元庫路徑: IIS://LM/W3SVC/AppPools property Enable32bitAppOnWin64; 使用msi 屬性:[ENABLE32BITAPPONWIN64] 檢查一個(gè)32位的應(yīng)用程序是否能運(yùn)行在一臺(tái)安裝了64位版本的windows的電腦上。 使用javascript腳本 發(fā)生在: 安裝。 |
CheckIISModules 檢測IIS模塊 |
在IIS7的機(jī)器上檢查是否需要安裝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腳本 發(fā)生在: 安裝。 |
AddGlobalIsapiFilter 添加全局ISAPI篩選器 |
只用于IIS7的機(jī)器。這個(gè)行為會(huì)在IIS管理元庫里添加一個(gè)命名為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腳本 發(fā)生在:安裝。 |
DeleteGlobalIsapiFilter 刪除全局ISAPI過濾器 |
只用于IIS7的機(jī)器,這個(gè)行為會(huì)從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腳本 發(fā)生在:反安裝、回滾。 |
AddIsapiCgiRestriction 添加ISAPI CGI約束 |
Only for IIS7 machines register ISAPI_RewriteProxy.dll as ISAPI extension in IIS metabase. 只用于IIS7的機(jī)器,在IIS管理元庫中將ISAPI_RewriteProxy.dl為ISAPI擴(kuò)展 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腳本 發(fā)生在:安裝。 |
DeleteIsapiCgiRestriction 刪除ISAPI CGI約束 |
只用于IIS7的機(jī)器,從IIS管理元庫中刪除用作ISAPI擴(kuò)展的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腳本 發(fā)生在:反安裝、回滾。 |
AddScriptMap 添加腳本映射 |
只用于IIS7的機(jī)器,在IIS管理元庫中將ISAPI_RewriteProxy.dll注冊為ISAPI擴(kuò)展用于處理*.rwhlp文件擴(kuò)展名。 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腳本 發(fā)生在:安裝。 |
DeleteScriptMap 刪除腳本映射 |
只用于IIS7的機(jī)器,從IIS管理元庫里去除用作ISAPI擴(kuò)展以處理*.rwhlp文件擴(kuò)展名的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腳本 發(fā)生在:反安裝、回滾。 |
3.1基本概念
URL數(shù)據(jù)處理是用一個(gè)文本配置文件來定制的,內(nèi)含各種指令設(shè)置。配置分幾種等級。首先是全局(服務(wù)器范圍的)配置指令,放置在ISAPI_Rewrite安裝目錄里的一個(gè)名為httpd.conf的文件里。那里還有若干個(gè)標(biāo)簽可以封裝應(yīng)用到特殊位置的指令:<VirtualHost>、<Directory>、<DirectoryMatch>、<Files>、 <FilesMatch>、<Location>以及<LocationMatch>。最后ISAPI_Rewrite支持可以放在任何網(wǎng)站目錄里的.htaccess文件,那些文件中的規(guī)則可以應(yīng)用到該位置以及它的子目錄中。所有的配置文件在每次修改文件后都會(huì)被自動(dòng)重載。允許用第三方程序和腳本來修改文件。
在很多情況下ISAPI_Rewrite是用來重寫URL的。除了重寫之外,ISAPI_REWRITE能夠修改、生成、刪除任何其它客戶端Request中的HTTP頭。模塊操作可以載入改寫、代理、重定向或者阻斷原始客戶端到服務(wù)器的請求。
Rewriting可能使服務(wù)器在得到了一個(gè)客戶端的源請求時(shí)用一個(gè)新的URL繼續(xù)請求處理。新的URL可以包括查詢串部分(跟在問號(hào)后面),也可以指向任何一個(gè)完全的靜態(tài)文件或者腳本(例如asp)、或者程序(例如.exe),等等。對用戶和網(wǎng)站配置來說重寫是徹底透明的。因?yàn)樗黈eb應(yīng)用程序收到請求之前在服務(wù)器內(nèi)部執(zhí)行。
Proxying使URL經(jīng)過內(nèi)部處理后指向另一臺(tái)服務(wù)器,并很快傳遞到遠(yuǎn)程服務(wù)器上(換言之,規(guī)則處理在這里中止了)。遠(yuǎn)程服務(wù)器的響應(yīng)很快被傳回客戶端。代理服務(wù)器要求你指定完整的有效URL,以協(xié)議、包括主機(jī)名開頭等等。ISAPI_Rewrite使用ISAPI擴(kuò)展來處理代理請求,你可以在“代理服務(wù)器配置”這一章里讀到更多信息。
Redirection將發(fā)送一個(gè)帶有重定向指令的即時(shí)響應(yīng)(HTTP響應(yīng)碼為302或者說301),將網(wǎng)址設(shè)置為一個(gè)新的位置。您可以在重定向指令里使用絕對URL格式(這是RFC2616所要求的)將請求重定向到不同的主機(jī)、端口和協(xié)議。如果此信息被忽略, ISAPI_Rewrite將自動(dòng)照當(dāng)前的協(xié)議、服務(wù)器名稱和目錄位置提供URL。重定向指令總是導(dǎo)致重寫引擎中止處理后面的規(guī)則序列。
每個(gè)規(guī)則按它在配置文件中出現(xiàn)的順序來應(yīng)用。目錄級配置文件從父路徑開始一個(gè)接一個(gè)地處理,來自于全局配置文件的規(guī)則最先適用。
在修改URL之前ISAPI_Rewrite會(huì)保存原URL到Http頭,命名為X-Rewrite-URL。然后它能夠在腳本中作為HTTP_X_REWRITE_URL服務(wù)器變量取回。因?yàn)樵贗IS里,系統(tǒng)變量名不能被修改,所以ISAPI_Rewrite不能提供與Apache兼容的變量名REQUEST_URI。如果你的應(yīng)用程序的設(shè)計(jì)要依賴于REQUEST_URI變量,你必須修改它,用HTTP_X_REWRITE_URL變量來代替。下面是一個(gè)PHP代碼補(bǔ)丁的示例:
if (isset($_SERVER['HTTP_X_REWRITE_URL'])) { $_SERVER['REQUEST_URI'] = $_SERVER['HTTP_X_REWRITE_URL']; }后面跟有RewriteRule(或者RewriteProxy)指令的多重RewriteCond指令只影響單個(gè)規(guī)則。如果一些條件需要被用于多個(gè)規(guī)則,必須重復(fù)寫這些條件指令以應(yīng)用到每條規(guī)則上。
3.2和Apache下mod_rewrite的兼容性
這里有一個(gè)完整的ISAPI_Rewrite和mod_rewrite兼容性圖表。標(biāo)記為綠色的功能或指令是充分支持的,黃色的功能是部分支持或計(jì)劃在下一版本中支持,標(biāo)示為紅色的功能是不支持的。
· 兼容Perl的正則表達(dá)式 (plus extended syntax)
· 服務(wù)器級httpd.conf配置
· 虛擬網(wǎng)站.htaccess配置文件
· 目錄.htaccess配置文件
· <VirtualHost>
· <Directory>
· <DirectoryMatch>
· <Files>
· <FilesMatch>
· <Location>
· <LocationMatch>
· AccessFileName
· RewriteEngine
· RewriteRule
o $N 規(guī)則后向引用
o %N RewriteCond 后向引用
o ${mapname:key|default}
o %{VARNAME} 服務(wù)器變量
o '!' 取非
o [C] 與下一個(gè)規(guī)則聯(lián)鎖
o [CO=name:val:domain:lifetime:path] 設(shè)置cookie
o [E=var:val] 設(shè)置環(huán)境變量
o [F] 強(qiáng)制禁止應(yīng)答
o [G] 強(qiáng)制繼續(xù)應(yīng)答
o [H=content-handler] 明確的內(nèi)容處理 (不適用)
o [L] 上一個(gè)規(guī)則標(biāo)記
o [N] 再次應(yīng)用規(guī)則
o [NC] 大小寫不敏感
o [NE] 不轉(zhuǎn)義輸出
o [NS]非內(nèi)部子請求
o [P]代理通過
o [PT] 傳遞通過下一個(gè)處理程序 (一直開啟)
o [QSA] 追加查詢字符串
o [R =code] 重定向
o [S=num] 跳到下面第 n條規(guī)則
o [T=MIME-type] 強(qiáng)制明確應(yīng)答 MIME 類型
· RewriteCond
o [NC] 大小寫不敏感
o [OR] 邏輯并集
o %{HTTP:header}
o '!' 非
o '<CondPattern' 大于比較符
o '>CondPattern' 小于比較符
o '=CondPattern' 等于比較符
o '-d' 目錄存在
o '-f' 文件存在
o '-s' 非零文件
o '-l' 符號(hào)鏈接
o '-x' 有可執(zhí)行權(quán)限的文件
o '-F' 通過子請求文件存在
o '-U' 通過子請求URL存在
· RewriteBase
· RewriteMap
o txt: 文本映射
o rnd: 隨機(jī)映射
o int: 內(nèi)部函數(shù) toupper, tolower, escape, unescape
o prg: 外部程序
o dbm: 散列文件
· RewriteLog
· RewriteLogLevel
· RewriteOptions
· RewriteLock
· AllowOverride
以下是這個(gè)程序文檔中要被用到的使用環(huán)境的詳解:
server config
這個(gè)標(biāo)志表示該指令可以用在全局httpd.conf配置文件中,但是不能用在任何一個(gè)分區(qū)(例如<Virtualhost>或者<Directory>)內(nèi)部。它不允許放在.htaccess文件中。
vitrual host
這意味著指令可以出現(xiàn)在<VirtualHost>容器內(nèi)。
directory
這個(gè)標(biāo)志表示指令在<Diretory>、<Location>、<Files>容器內(nèi)可用,而且它們的正則表達(dá)式是等價(jià)的。
.htaccess
使用環(huán)境標(biāo)為它的指令可以出現(xiàn)在每個(gè)目錄的.htaccess文件中。記住當(dāng)RewriteRule指令用在.htaccess配置文件中時(shí),它將自動(dòng)從路徑中剝?nèi)ケ镜啬夸浨熬Y,只對剩下的部分應(yīng)用規(guī)則。你可以使用RewriteBase指令顯式地給這些規(guī)則指定一個(gè)基本路徑。
應(yīng)用次序
當(dāng)同一分區(qū)內(nèi)的多條指令同時(shí)適用時(shí),理解每個(gè)分區(qū)應(yīng)用的次序是很重要的,因?yàn)樗鼤?huì)對最終效果起作用。應(yīng)用次序如下所述:
1.<Directory>(正則表達(dá)式除外):多個(gè)<Directory>分區(qū)可以應(yīng)用于單個(gè)請求,如果多個(gè)(非正則表達(dá)式)<Directory>分區(qū)匹配了包含文檔的這個(gè)目錄(或者它的上級目錄中的一個(gè)),則按照從短到長的匹配次序應(yīng)用指令。
2..htaccess文件按父目錄到子目錄的順序應(yīng)用。
3.<Files>和<FileMatch>同時(shí)被執(zhí)行。
4.<Location>和<LocationMatch>也同時(shí)被執(zhí)行。
先應(yīng)用虛擬主機(jī)外面定義的相應(yīng)分區(qū)和指令,再應(yīng)用<VirtualHost>分區(qū)中的分區(qū)和指令。同一時(shí)間只有一個(gè)<VirtualHost>分區(qū)可以應(yīng)用給請求。較晚的分區(qū)優(yōu)先于較早的那些。
3.4正則表達(dá)式
正則表達(dá)式語法指南是Rege++文檔的一部分,由John Maddock博士友情提供,Copyright ?1998-2004,包含在《Boost license》這本書里。完整的語法說明可以在《Boost.Regex documentation》中找到。
字面值
所的字符都是字面值,除了“.”“*”“?”“+”“(”“)”“{”“}”“[”“]”“^”和“$”。當(dāng)這些字符由“\”前導(dǎo)時(shí)也是字面值。一個(gè)字面值是個(gè)匹配它自己的字符。
通配符
點(diǎn)字符“.”匹配空字符和換行符以外的任何單個(gè)字符。
重復(fù)
重復(fù)是被重復(fù)任意次數(shù)的表達(dá)式。一個(gè)表達(dá)式跟著“*”可以被重復(fù)任意次數(shù),包括重復(fù)零次。一個(gè)表達(dá)式跟著“+”可以被重復(fù)任意次數(shù),但是至少重復(fù)一次。一個(gè)表達(dá)式跟著“?”可以被只重復(fù)零次或者一次。當(dāng)需要明確指定重復(fù)的最低次數(shù)和最高次數(shù)時(shí),可以用限定運(yùn)算符“{}”。這樣“a{2}”是字母“a”重復(fù)兩次!癮{2,4}”表示字母“a”重復(fù)2到4次!癮{2,}”表示字母“a”重復(fù)2到無限多次。注意“{}”里面必須沒有空格。而且它沒有對上限值和下限值限定范圍。所有的重復(fù)表達(dá)式參考盡可能短的前子表達(dá)式:一個(gè)單獨(dú)字符,一個(gè)字符集,或者一個(gè)用“()”括起來的子表達(dá)式,舉幾個(gè)例子:
? "ba*"匹配所有的"b","ba","baaa" 等等。
? "ba+"匹配"ba"或"baaa",但是不匹配"b"。
? "ba?"匹配"b"或者"ba"。
? "ba{2,4}"匹配"baa","baaa","baaaa"。
懶惰型重復(fù)
在重復(fù)之后附加一個(gè)“?”就是懶惰型的重復(fù)了。一個(gè)懶惰型的重復(fù)是指匹配盡可能短的字符串。
例如:匹配HTML標(biāo)記對可以使用下面這樣的正則表達(dá)式:
"<\s*tagname[^>]*>(.*?)<\s*/tagname\s*>"
在這種情況下$1將包含標(biāo)簽對之間的文本,而且是最短的匹配字符串。
插入成份
插入成分有兩個(gè)用處——把項(xiàng)目編組到子表達(dá)式中,并且對生成的匹配標(biāo)號(hào)。例如,表達(dá)式"(ab)*"將匹配所有的這類字符串"ababab"。所有的被插入成份標(biāo)號(hào)的子匹配將可以用\N或者$N語法來回溯引用到。它允許子表達(dá)式匹配空字符串,子表達(dá)式以1為開始從左往右編號(hào)。子表達(dá)式0就是整個(gè)表達(dá)式。
正則表達(dá)式
無標(biāo)記插入
有時(shí)候你需要把子表達(dá)式編組為插入成份,但是不想為這個(gè)插入成分而吐出另一個(gè)標(biāo)記的子表達(dá)式。在這種情況下,一個(gè)非標(biāo)記插入(?:expression)可能有用。例如,下例表達(dá)式可以創(chuàng)建一個(gè)非子表達(dá)式:
"(?:abc)*"
N擇1標(biāo)記
當(dāng)表達(dá)式可以匹配一個(gè)子表達(dá)式或另一個(gè)的時(shí)候,N擇1標(biāo)記起作用了。每個(gè)N擇1可以用|隔開。每個(gè)N擇1標(biāo)記是一個(gè)最大可能性前綴子表達(dá)式,它是和重復(fù)操作符相反的行為。
示例:
? "a(b|c)"匹配"ab"或"ac"
? "abc|def"匹配"abc"或"def"
預(yù)置符
一個(gè)預(yù)置符是一個(gè)可以匹配所有作為預(yù)置成員的單個(gè)字符的預(yù)置。預(yù)置字符用方括號(hào)“[”和“]”括起來,可以容納字面值、字符序列、字符類、經(jīng)整理過的對象以及等價(jià)的類。用^打頭的預(yù)置聲明可以排除包含的內(nèi)容。
示例:
字面值
? "[abc]"匹配"a"或"b"或"b"。
? "[^abc]"匹配"a"和"b"和"c"之外的所有字符。
字符序列
? "[a-z]"匹配所有的從"a"到"z"的字符
? "[^A-Z]"匹配所有的字符除了從"A"到"Z"的這些字符。
字符類
字符類用語法"[:classname:]"來表示,classname是聲明過的預(yù)設(shè)值中的一個(gè)。例如:"[[:space:]]"是所有的空白占位符的預(yù)設(shè)。下表中的字符類是可用的:
alnum | 所有的alpha數(shù)字字母 |
alpha | 字母表字符[a-zA-Z]。其它字符也可以包含在內(nèi),這取決于本地環(huán)境 |
blank | 所有的空白字符,包含回車或者空格 |
cntrl | 所有的控制字符 |
digit | 從0到9的數(shù)字 |
graph | 所有的圖畫字符 |
lower | 所有的小寫字母[a-z],其它的字符也可以包含在內(nèi),這取決于本地環(huán)境 |
所有的印刷字符 | |
punct | 所有的標(biāo)點(diǎn)符號(hào) |
space | 所有的空白占位符 |
upper | 所有的大寫字母[A-Z],其它的字符也可以包含在內(nèi),這取決于本地環(huán)境 |
xdigit | 所有的16進(jìn)字字符0~9,A-F |
word | 所有的詞匯字符,包括字母數(shù)字外加underscore |
unicode | 所有的編碼大于255的字符,這只對大范圍字符特征類生效 |
這里有一些縮寫法可以代替以上字符類:
? \w 代替 [:word:]
? \s 代替 [:space:]
? \d 代替 [:digit:]
? \l 代替 [:lower:]
? \u 代替 [:upper:]
正則表達(dá)式
集合元素一般采用預(yù)置聲明內(nèi)加[.tagname.]的格式。其中tagname既可以是一個(gè)單個(gè)字符,也可以是一個(gè)集合元素名。例如:[[.a.]]等價(jià)于[a],[[.comma.]]等價(jià)于[,]。ISAPI_Rewrite支持所有的標(biāo)準(zhǔn)POSIX集合元素名,以及下面的這些字符組合:“ae”、“ch”、“l(fā)l”、“ss”、“nj”、“dz”、“l(fā)j”、任意小寫、大寫、首字母大寫的變化組合。多個(gè)字符集合元素可以導(dǎo)致預(yù)置匹配一個(gè)以上的字符。例如:[[.ae.]]將匹配兩個(gè)字符,但是[^[.ae.]]只會(huì)匹配一個(gè)字符。
等價(jià)類
等價(jià)類一般采用預(yù)置聲明內(nèi)加[=tagname=]的格式,其中tagname既可以是單個(gè)字符,也可以是一個(gè)集合元素的名稱,它能匹配同樣的主要等價(jià)類成員的字符,就跟集合元素[.tagname.]一樣。一個(gè)等級類是一個(gè)相同整理的字符預(yù)設(shè),但主要是一個(gè)等價(jià)類的字符集,其主要排序關(guān)鍵字都是一樣的(例如,字符串通常先依字符整理,然后根據(jù)重音,然后根據(jù)大小寫。主要排序鍵與字符相關(guān),次要與重音相關(guān),再次與大小寫相關(guān)。如果沒有等價(jià)類符合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.].
要在一個(gè)預(yù)設(shè)中包含字面值“-”,請這樣做:使它成為開放的“[”或者“[^”后面的第一個(gè)字符、一個(gè)系列或者一個(gè)集合元素的末點(diǎn),或者用一個(gè)前置的轉(zhuǎn)義字符如“[\-]”。要在一個(gè)預(yù)設(shè)中包含一個(gè)字面值“[”或者“]”或者“^”,請把它們作為一個(gè)系列或者一個(gè)集合元素的末點(diǎn),或者用一個(gè)前置的轉(zhuǎn)義字符。
行錨
錨用來匹配一行開頭或結(jié)尾的空串!癪”匹配行開頭的空串,“$”匹配行結(jié)尾的空串。
回溯引用
回溯引用是引用前面已經(jīng)被匹配的子表達(dá)式。這個(gè)引用是被匹配的子表達(dá)式,而不是表達(dá)式本身;厮菀冒ㄞD(zhuǎn)義字符“\”跟著一個(gè)從1到9的數(shù)字!癨1”引用第一個(gè)子表達(dá)式,“\2”引用第二個(gè),依次類推。舉個(gè)例子,表達(dá)式“(.*)\1”匹配任何關(guān)于它的中點(diǎn)重復(fù)的字符串,比如說“abcabc”或者“xyzxyz”。一個(gè)對子表達(dá)式的回溯引用不參加任何匹配,匹配空字符串。在ISAPI_Rewrite中,所有的回溯引用是對整個(gè)RewriteRule和相應(yīng)的RewriteCond指令是全局性相關(guān)的。RewriteRule指令中如果有RewirteCond子令的話,子匹配從相應(yīng)的RewriteRule指令的第一個(gè)RewriteCond指令開始從上到下從左往右編號(hào)。
向前查找
向前查找有兩種形式:正向前查找和負(fù)向前查找。
• "(?=abc)"匹配跟在表達(dá)式"abc"后面的零字符。
• "(?!abc)"匹配不跟在表達(dá)式"abc"后面的零字符。
通配符
下面的運(yùn)算符提供了與GNU正則表達(dá)式庫的兼容性。
• "\w"匹配任意單個(gè)組詞字符,它等價(jià)于表達(dá)式“[[:word:]]”。
• "\W"匹配任意一個(gè)非組詞字符,它等價(jià)于表達(dá)式“[^[:word:]]”。
• "\<"匹配詞頭空字符串。
• "\>"匹配詞尾空字符串。
• "\b"匹配詞頭或者詞尾空字符串。
• "\B"匹配詞語中的空字符串。
轉(zhuǎn)義字符
轉(zhuǎn)義字符“\”含有多重意義:
• 轉(zhuǎn)義字符可以引導(dǎo)一個(gè)運(yùn)算符,例如:回溯引用、詞操作符
• 轉(zhuǎn)義字符可以使下面的字符正常,比如說“\*”代表一個(gè)字面值“*”,而不是重復(fù)運(yùn)算符。
單個(gè)字符轉(zhuǎn)義序列
下面的轉(zhuǎn)義序列是單個(gè)字符的別名:
轉(zhuǎn)義序列 | 字符代碼 | 含義 |
\a | 0x07 | 信號(hào)鈴記號(hào). |
\t | 0x09 | 制表符 |
\v | 0x0B | 垂直制表符 |
\e | 0x1B | ASCII轉(zhuǎn)義字符 |
\0dd | 0dd | 八進(jìn)制字符代碼,其中dd是一個(gè)或多個(gè)八進(jìn)制數(shù)字。 |
\xXX | 0xXX | 十六進(jìn)制字符代碼,其中XX是一個(gè)或多個(gè)八進(jìn)制數(shù)字。 |
\x{XX} | 0xXX | 十六進(jìn)制字符代碼,其中XX是一個(gè)或更多十六進(jìn)制數(shù)字,可選用Unicode字符。 |
\cZ | z-@ | ASCII轉(zhuǎn)義序列control-Z,其中Z是任意一個(gè)編碼大于或等于“@”的編碼的ASCII字符。 |
雜項(xiàng)轉(zhuǎn)義序列
以下提供perl的大部分兼容性,但是在\l、\L、\u和\U上有一些區(qū)別
轉(zhuǎn)義序列 | 含義 |
\w | 等價(jià)于 [[:word:]]. |
\W | 等價(jià)于[^[:word:]]. |
\s | 等價(jià)于[[:space:]]。 |
\S | 等價(jià)于[^[:space:]]。 |
\d | 等價(jià)于[[:digit:]]。 |
\D | 等價(jià)于[^[:digit:]]。 |
\l | 等價(jià)于[[:lower:]]。 |
\L | 等價(jià)于[^[:lower:]]。 |
\u | 等價(jià)于[[:upper:]]。 |
\U | 等價(jià)于[^[:upper:]]。 |
\C | 任何單個(gè)字符,等價(jià)于“.” |
\X | 匹配任何Unicode組合字符序列,例如“a\x0301”(字符a和一個(gè)尖角) |
\Q | 開始引號(hào)運(yùn)算符。后面跟前的所有的內(nèi)容都被當(dāng)作字面值,直到發(fā)現(xiàn)一個(gè)\E結(jié)束運(yùn)算符。 |
\E | 結(jié)束引用運(yùn)算符,終止一個(gè)由\Q開頭的引用序列。 |
怎樣得到匹配
正則表達(dá)式將匹配第一個(gè)可匹配字符串。如果從給定的起始處可以匹配到不止一個(gè)字符串,則它會(huì)匹配那個(gè)能匹配得最長的字符串。如果從同一個(gè)起始處有多個(gè)合適的匹配,而且每個(gè)匹配的長度都一樣,則將選擇那個(gè)第一子表達(dá)式匹配得最長的匹配。如果有兩個(gè)以上的匹配字符串它們的第一子表達(dá)式匹配得一樣長,則比較第二子表達(dá)式匹配的長度,如此類推。注意:ISAPI_Rewrite使用比封演算法。只有表達(dá)式匹配了整個(gè)順序串才能得到匹配結(jié)果。例如:
• RewriteCond URL ^/somedir/.* #將匹配任何導(dǎo)向somedir目錄以及它的子目錄的請求,與此同時(shí),
• RewriteCond URL ^/somedir/ #只匹配somedir根目錄的請求。
對“病態(tài)”正則表達(dá)式的特別提示:
ISAPI_Rewrite 使用了一個(gè)非常強(qiáng)大的來自Boost庫的正則表達(dá)式引擎。但是它依然有一些局限性:有著一些“病態(tài)”的表達(dá)式,它可能會(huì)指數(shù)級地消耗匹配時(shí)間。這些都涉及到嵌套重復(fù)運(yùn)算符,例如試圖對N個(gè)連續(xù)字母a匹配表達(dá)式“(a*a)*b”,消耗的時(shí)間將與N2成正比。這些表達(dá)式常常能改成另一種寫法來避免這種問題。例如,“(a*a)*b”可以被改寫成“a*b”,解析它消耗的時(shí)間與N成正比。在多數(shù)情況下,非嵌套重復(fù)表達(dá)式消耗的時(shí)間與N2成正比,但是,如果條款是相互排斥的,則它們會(huì)在線性時(shí)間里完成匹配。在“a*b”這種情況下,每個(gè)字符將要么匹配a要么匹配b或者不匹配。相較之下,“a*a”匹配器不能告知哪個(gè)分支被采。ǖ谝粋(gè) a還是第二個(gè)a)因此必須嘗試兩種。
Regex可以檢測出這種“病態(tài)”的正則表達(dá)式并終止和它們的匹配。這將使ISAPI_Rewrite的規(guī)則失效。當(dāng)一個(gè)規(guī)則失效時(shí),ISAPI_Rewrite將給客戶端發(fā)送一個(gè)"Internal Server error - Rule Failed"的狀態(tài),以表示配置錯(cuò)誤。
4.1AccessFileName指令
說明 | 設(shè)置分布式配置文件的名稱 |
語法 | AccessFileName filename [filename] ... |
默認(rèn)值 | AccessFileName .htaccess |
使用環(huán)境 | server config |
指定一個(gè)ISAPI_ReWrite尋求分布式配置的文件名列表。默認(rèn)文件名是.htaccess。ISAPI_ReWrite只能載入它能在這個(gè)列表中找到的第一個(gè)文件。默認(rèn)情況下ISAPI_ReWrite管理者會(huì)以hidden屬性標(biāo)記配置文件-它將防止文件被遠(yuǎn)程用戶直接訪問到。
如果配置文件進(jìn)行了任何修改,它將在下次請求服務(wù)器時(shí)自動(dòng)加載。
4.2AllowOverride指令
說明 | 明確規(guī)定了每個(gè)目錄重寫的基準(zhǔn)URL。 |
語法 | AllowOverride All|None|directive-type [directive-type] ... |
默認(rèn)值 | AllowOverride All |
使用環(huán)境 | server config, virtual host, directory |
這個(gè)指令聲明了在分布式.htaccess文件里的指令是否可以覆蓋父級別的httpd.conf中的指令。在ISAPI_Rewrite的使用環(huán)境中,這個(gè)指令實(shí)際上控制了特定虛擬主機(jī)或者目錄的.htaccess文件的可用或者不可用。目前只支持三個(gè)值:All、None和FileInfo。
All和FileInfo使.htaccess文件以及它里面的整個(gè)ISAPI_Rewrite目錄可用,None使所有的.htaccess文件以及目錄不可用。這些目錄具有繼承性。這意味著如果你為一些目錄或者虛擬主機(jī)指定AllowOverride none,.htaccess文件將對整個(gè)子目錄樹不可用。
4.4RewriteRule指令
說明 | 定義URL重寫規(guī)則 |
語法 | RewriteRule Pattern Substitution [flags] |
使用環(huán)境 | server config, virtual host, directory, .htaccess |
這個(gè)指令定義了單個(gè)URL重寫操作。它可能在一個(gè)配置文件中出現(xiàn)多次,每個(gè)實(shí)例定義一個(gè)重寫URL的規(guī)則。RewriteRule指令包含URL匹配模式、替換字符串以及可選的標(biāo)志設(shè)置。
Pattern(模式)是一個(gè)用來匹配當(dāng)前URL的Perl兼容正則表達(dá)式。當(dāng)前的URL可以是原來請求的URL或者已經(jīng)由優(yōu)先級高的規(guī)則替改過的URL。網(wǎng)址從不包含協(xié)議或者主機(jī)名,從第一個(gè)斜杠字符開始(只對httpd.conf文件適用)。而且當(dāng)前網(wǎng)址還因不同的應(yīng)用配置級別而異。對于目錄級配置(.htaccess文件),結(jié)尾的斜線和配置文件的目錄名,會(huì)在匹配時(shí)被從URL中忽略掉。在創(chuàng)建正則表達(dá)式時(shí),請閱讀這個(gè)文檔的正則表達(dá)式語法部分來得到更多的信息。
"!"字符打頭的模式將否定整個(gè)表達(dá)式。否定模式不能產(chǎn)生子匹配,所以你不能使用$N的替代引用。
Substitution(替換)字符串指定了模式是匹配時(shí)生成URL的格式字符串。除了純文本,它可以包括這些特殊字符。
• 對Rewrite模式的回溯引用 $N
• 對Rewrite模式的回溯引用 %N
• 服務(wù)器變量 %{VARNAME}
• 條件格式模式 ?Ntrue_string:false_string
• 分組括號(hào)“(”和“)”
替換字符串將所有的字符視為字面值,除了$'、'\'、'('、')','?',':'和'\'。為了字面化地讀出特殊字符,它定義了用"\"引導(dǎo)的轉(zhuǎn)義字符。下面的特殊字符是允許的。
$& | 輸出匹配的整個(gè)表達(dá)式。 |
$` | 輸出上一個(gè)的匹配結(jié)束到當(dāng)前匹配的開始之間的文本(如果之前沒有找到匹配串,則輸出從開頭到當(dāng)前匹配的開始之間的文本)。 |
$' | 輸出當(dāng)前匹配之后跟著的所有文字。 |
$$ | 輸出字面值$ |
\a | 信號(hào)鈴字符 |
\f | 表單反饋?zhàn)址?/td> |
\n | 新行字符 |
\r | 回車符 |
\t | 制表符 |
\v | 垂直制表符 |
\x | 十六進(jìn)制字符,比如說\x0D. |
\x{} | 一個(gè)可能的Unicode十六進(jìn)制字符-例如\x{1A0} |
\cx | ASCII的轉(zhuǎn)義字符x,例如\c @等價(jià)于escape-@。 |
\e | The ASCII 轉(zhuǎn)義字符 |
\dd | 八進(jìn)制字符常量,例如\10。 |
\l | 導(dǎo)致下一個(gè)字符被小寫輸出。 |
\u | 導(dǎo)致下一個(gè)字符被大寫輸出。 |
\L | 導(dǎo)致整個(gè)后繼字符串被小寫輸出,直到遇到\E。 |
\U | 導(dǎo)致整個(gè)后繼字符串被大寫輸出,直到遇到\E。 |
\E | 結(jié)束\L或者\(yùn)U的后續(xù)字符串 |
\\ | 單個(gè)反斜杠字符'\' |
RewriteRule從父配置文件開始按照在配置文件中出現(xiàn)的次序應(yīng)用。每個(gè)規(guī)則只有在它的Pattern匹配了一個(gè)URL而且所有連接條件(RewriteCond)都匹配時(shí)才會(huì)被應(yīng)用。在該URL用Substitution完成替換之后,重寫過程還在繼續(xù),一直到配置文件結(jié)束或者遇到一個(gè)用了任何停止標(biāo)志的規(guī)則。在Substitution中的特殊字符串"-"(短橫)意味著沒有替換,而且當(dāng)你需要應(yīng)用該規(guī)則并留下的原始的未被染指過的URL時(shí)它是很有用的。
此外,這里有一個(gè)支持的flag(標(biāo)志)列表。這些標(biāo)識(shí)可以改變規(guī)則的表現(xiàn)。與Apache完全兼容的標(biāo)志被標(biāo)記為綠色,不支持的標(biāo)志被標(biāo)記為綠色,只在 ISAPI_Rewrite中被支持的標(biāo)識(shí)被標(biāo)記成黃色。
CU (Case Upper)
把替換字符串改成大寫.
CL (Case Lower)
把替換字符串改成小寫.
chain|C
將當(dāng)前規(guī)則與后一條規(guī)則鏈接起來,后一條規(guī)則只有在當(dāng)前規(guī)則被匹配的情況下才能被執(zhí)行。鏈接可以再后續(xù)鏈接。
cookie|CO=NAME:VAL:domain[:lifetime[:path]]
設(shè)置一個(gè)有指定字段的cookies頭,并把它和當(dāng)前請求的響應(yīng)一起發(fā)送到客戶端。
env|E=VAR:VAL
不支持,在UNIX環(huán)境中設(shè)置一個(gè)環(huán)境變量,在Windows系統(tǒng)中無意義。
forbidden|F
發(fā)送即時(shí)403 FORBIDDEN響應(yīng)到客戶端,停止這個(gè)請求的規(guī)則處理以及所有其他的替換處理。
gone|G
發(fā)送一個(gè)即時(shí)401Gone響應(yīng)到客戶端,停止這個(gè)請求的規(guī)則處理以及所有其他的替換過程。
handler|H=Content-handler
不支持,為請求明確指定了處理處理。在IIS的世界中這是可以通過重寫請求的文件擴(kuò)展名來實(shí)現(xiàn)。但是沒有從Apache處理到IIS文件擴(kuò)展名的直接轉(zhuǎn)換方法。
last|L
停止這里的重寫處理,不再應(yīng)用當(dāng)前配置文件中的其它規(guī)則。在這種情況下,后代的.htaccess文件依然能被用到。
loop|LP
在一個(gè)循環(huán)中重復(fù)運(yùn)行當(dāng)前單個(gè)規(guī)則直到它的模式以及條件不再被匹配了。循環(huán)次數(shù)被限定為200免得陷入無限循環(huán)。
next|N
從當(dāng)前配置文件開始處重復(fù)運(yùn)行重寫處理。循環(huán)次數(shù)被限定為200免得陷入無限循環(huán)。
nocase|NC
這個(gè)標(biāo)記使Pattern大小寫不敏感。
noescape|NE
不轉(zhuǎn)義輸出。在ISAPI_Rewrite默認(rèn)情況下,在輸出中會(huì)把所有的非ANSI字符編碼為十六進(jìn)制數(shù)%xx。
nosubreq|NS
這個(gè)標(biāo)識(shí)在ISAPI_Rewrite中與在Apache中含義不同。精確的轉(zhuǎn)換是不可能的,但這個(gè)標(biāo)志可能仍然是有用的。每當(dāng)配置文件處理完成之后,URL被重寫了,ISAPI_Rewrite將啟動(dòng)這個(gè)新的URL處理過程(與Apache相同)使它可以應(yīng)用到另一個(gè)配置文件中。此標(biāo)識(shí)意思是該規(guī)則只針對初始用戶的請求執(zhí)行,不針對已被重寫過的請求執(zhí)行,以防可能出現(xiàn)的循環(huán)。ISAPI_Rewrite限定循環(huán)重復(fù)次數(shù)為10。
nounicode|NU
如果設(shè)置了NU標(biāo)記,從Unicode轉(zhuǎn)換為UTF - 8將不會(huì)發(fā)生。所有Unicode字符會(huì)保持它的%xx格式不變。
O (nOrmalize)
留著用于與ISAPI_Rewrite 2.x兼容。如果使用了RewriteCompatibility2,這個(gè)指令在處理之前將URL規(guī)范化。規(guī)范化包括移除一個(gè)URL編碼、錯(cuò)誤字符,等等。同時(shí)URL的規(guī)范化將完全移除它的查詢字符串。如果RewriteCompatibility2 沒有被使用,URL按照默認(rèn)被規(guī)范化(就如同它在mod_rewrite中所做的),此標(biāo)志的含義將反轉(zhuǎn)。
proxy|P
將結(jié)果URL強(qiáng)制內(nèi)部處理為另一臺(tái)服務(wù)器上的目標(biāo),并即時(shí)傳到遠(yuǎn)程服務(wù)器上,并且,規(guī)則處理在這里中斷了。遠(yuǎn)程服務(wù)器的響應(yīng)將被傳遞回客戶端。proxy需要您指定完整的URL,由協(xié)議、主機(jī)名稱等開頭。ISAPI_Rewrite使用ISAPI擴(kuò)展來處理代理請求。你可以在代理配置章節(jié)中閱讀到更多有關(guān)于此的內(nèi) 容。
passthrough|PT
不支持或者始終支持。在IIS中結(jié)果始終傳遞到下一個(gè)處理
qsappend|QSA
追加當(dāng)前查找串的數(shù)據(jù)到替換串而不是由一個(gè)替換字符串取代它。當(dāng)你需要在保留原來的參數(shù)再添加更多的查詢字符串參數(shù)時(shí),可以使用它。
redirect|R [=code]
強(qiáng)制服務(wù)器用重定向指令給客戶端發(fā)送一個(gè)即時(shí)響應(yīng),提供一個(gè)新的接替位置?梢赃x加前綴http://thishost[:thissport]/從而把URL帶到一個(gè)可用的絕對形式。如果沒有給出代碼,將使用一個(gè)302響應(yīng)(暫時(shí)性移動(dòng))。你可以選擇在3XX系列范圍內(nèi)指定任何代碼。
skip|S=num
如果當(dāng)前的規(guī)則匹配,強(qiáng)制rewrite引擎跳過后面num個(gè)規(guī)則。
type|T=MIME-type
強(qiáng)制目標(biāo)文件的MIME類型轉(zhuǎn)換成被設(shè)定的MIME類型。這能夠被用來根據(jù)一些條件設(shè)置內(nèi)容類型。
U (Unmangle log)
無損記錄。記錄它原來請求的網(wǎng)址,而不是被重寫的URL。
4.5RewriteCond指令
說明 | 為以下的RewriteRule定義一個(gè)條件 |
語法 | RewriteCond TestString CondPattern |
使用環(huán)境 | server config, virtual host, directory, .htaccess |
該指令為后面的RewriteRule,RewriteHeader或RewriteProxy指令規(guī)定了一個(gè)條件。一個(gè)規(guī)則指令前可以有一個(gè)或多個(gè)條件,規(guī)則只有在所有條件得到滿足的情況下才被應(yīng)用。
TestString附加到純文本可以包含下列結(jié)構(gòu)。
• 用語法$N回溯引用RewriteRule模式
• 用語法%N回溯引用前面的RewriteCond模式
• 用語法${mapname:key|default}擴(kuò)展RewriteMap
• 用語法%{HTTP:header}指代HTTP頭值
• 用語法%{NAME_OF_VARIABLE}指代服務(wù)器變量
以下是可用的服務(wù)器變量列表:
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指定一個(gè)應(yīng)用于TestString實(shí)例的正則表達(dá)式,以下特殊值也支持:
1.在正則表達(dá)式前頭加“!”符號(hào)指明否定模式。
2.'<CondPattern'將CondPattern作為一個(gè)純字符串按字典順序比較,結(jié)果比較大
3.'>CondPattern'按字典順序比較,結(jié)果比較小
4.'=CondPattern'按字典順序比較,結(jié)果相等
5.'-d' 檢測字符串是否存在目錄。
6.'-f' 檢測字符串是否存在文件。
7.'-s' 檢測字符串是不是一個(gè)非零大小的文件。
8.'-l' (鏈接) 不支持的,始終為false。
9.'-x' (擁有可執(zhí)行權(quán)限) 不支持的,始終為true。
10.'-F' (存在的文件,通過子請求) 不支持,和'–f'一樣。
11.'-U' (存在的URL,通過子請求) 不支持的,始終為false。
下面的標(biāo)記也是支持的:
'nocase|NC'
這個(gè)標(biāo)記使模式大小寫不敏感。
'ornext|OR'
這個(gè)標(biāo)記用邏輯或而不是隱含的邏輯與結(jié)合子請求RewriteCond指令。
O
留用于ISAPI_Rewrite 2.x的兼容性。在處理前規(guī)范化字符串。規(guī)范化包括移除一個(gè)URL編碼、錯(cuò)誤字符,等等。同時(shí)URL的規(guī)范化將完全移除它的查詢字符串。
4.6RewriteBase指令
說明 | 為每個(gè)目錄的重寫設(shè)置一個(gè)基準(zhǔn)的URL |
語法 | RewriteBase URL-path |
默認(rèn)值 | RewriteBase requested-directory-path |
使用環(huán)境 | directory, .htaccess |
當(dāng)RewriteRule指令用于每個(gè)目錄的配置文件(.htaccess)時(shí),它將自動(dòng)從路徑中剝?nèi)ケ镜啬夸浨熬Y,只對剩下的部分應(yīng)用規(guī)則。RewriteBase指令允許你為這些規(guī)則精確指定一個(gè)基準(zhǔn)。比如,哪部分要被剝離。
和Apache的mod_rewrite不同,ISAPI_Rewrite的訪問不僅僅針對于物理路徑,同時(shí)還針對于虛擬路徑,而且可以自動(dòng)地選擇正確的基準(zhǔn)。所以這個(gè)指令只是為了兼容性原因而被保留的。
URL-path可以是相對于根的路徑也可以是空,空的URL-path意味著規(guī)則的基準(zhǔn)等同于網(wǎng)站的根目錄。
4.7RewriteProxy指令
說明 | 代理請求到一個(gè)遠(yuǎn)程服務(wù)器 |
語法 | RewriteProxy Pattern Substitution [flags] |
使用環(huán)境 | server config, virtual host, directory, .htaccess |
使結(jié)果URL被內(nèi)部處理為另一臺(tái)服務(wù)器上的目標(biāo),并即時(shí)傳遞到遠(yuǎn)程服務(wù)器,從此中斷了規(guī)則處理。遠(yuǎn)程服務(wù)器的響應(yīng)將被傳遞回客戶端。代理要求您指定完整的URL,由協(xié)議,主機(jī)名稱等開頭。ISAPI_Rewrite使用ISAPI擴(kuò)展來處理代理請求。你可以在配置代理的章節(jié)里閱讀到更多。
語法和操作符與RewriteRule指令是相同的。但是RewroteProxy指令支持一些額外的標(biāo)記。
H (preserve Host)
代理模塊在連接遠(yuǎn)程服務(wù)器時(shí)將使用隨著源請求一起發(fā)送過來的主機(jī)頭,如果沒有這個(gè)標(biāo)志代理服務(wù)器則將用主機(jī)名和遠(yuǎn)程服務(wù)器的端口號(hào)組成主機(jī)頭。
A (Add authentication headers)
允許從代理服務(wù)器將一個(gè)認(rèn)證信息傳遞到局域網(wǎng)服務(wù)器上,當(dāng)客戶端認(rèn)證和代理服務(wù)器沖突時(shí)它很有用。服務(wù)模塊將對一個(gè)請求的服務(wù)器變量
AUTH_TYPE, AUTH_USER, LOGON_USER, REMOTE_USER
追加相應(yīng)的頭
X-ISRW-Proxy-AUTH-TYPE, X-ISRW-Proxy-AUTH-USER, X-ISRW-Proxy-LOGON-USER, X-ISRW-Proxy-REMOTE-USER
到被代理的服務(wù)器。
CR (use Credentials)
代理模塊將嘗試用在URL中指定的證書身份驗(yàn)證登錄遠(yuǎn)程服務(wù)器,或者用基本身份驗(yàn)證頭登錄遠(yuǎn)程服務(wù)器。用了這個(gè)標(biāo)志,你可以在一個(gè)替換字符串中使用http://user:password@host.com/page語法作為一個(gè)URL。
4.8RewriteHeader指令
說明 | 重寫任何請求的HTTP頭 |
語法 | RewriteHeader HeaderName: Pattern Substitution [flags] |
使用環(huán)境 | server config, virtual host, directory, .htaccess |
這個(gè)RewriteHeader指令是RewriteRule指令中的一個(gè)很常用的變量。而且它被設(shè)計(jì)用來重寫客戶端的URL部分以及HTTP頭的部分。技術(shù)上的RewriteRule指令,相當(dāng)于RewriteHeader的URL Pattern Substitution [flag]。這個(gè)指令可用于在IIS里更多應(yīng)用程序的處理之前重寫、創(chuàng)建或者刪除任何客戶端請求的HTTP頭。
HeaderName:指定將被重寫的HTTP頭的名字。
pattern、Substitution和flag與RewriteRule指令中都是相同的。
4.9RewriteMap指令
說明 | 為一個(gè)映射函數(shù)值定義一個(gè)鍵 |
語法 | RewriteMap MapName MapType:MapSource |
使用環(huán)境 | server config, virtual host, directory, .htaccess |
RewriteMap指令被用來定義一個(gè)鍵到值的查找功能。當(dāng)你需要映射大量的值時(shí),它會(huì)很有用的,而且它的速度遠(yuǎn)遠(yuǎn)快過用規(guī)則匹配來做到它。映射功能的性能受映射文件的大小影響微乎其微。有三種類型的映射:
• txt:用一個(gè)文本文件映射
• rnd:從多個(gè)可選項(xiàng)中產(chǎn)生隨機(jī)值
• int:內(nèi)部函數(shù)
MapName是這個(gè)映射功能的名字,在RewriteRule命令中被用來指定這個(gè)映射。請確保每個(gè)映射用唯一的名稱定義。你可以使用以下語法在RewriteRule指令的Substitution參數(shù)中調(diào)用映射功能
${ MapName : LookupKey | DefaultValue }
如果這個(gè)結(jié)構(gòu)是在Substitution中出現(xiàn),ISAPI_Rewrite將在映射中查找這個(gè)鍵,萬一找到了一個(gè),就用它的值替換這個(gè)結(jié)構(gòu)。如果什么值也沒有被找到,將用可選的DefaultValue。如果沒有指定DefaultValue,它將用一個(gè)空串替換。
下面的標(biāo)志也是支持的:
‘nocase|NC’
這個(gè)標(biāo)志使該查找鍵大小寫不敏感。
下面是一個(gè)大小寫不敏感映射文件指令的示例
RewriteMap examplemap txt:C:/path/to/file/map.txt [NC]
到MapSource文件的路徑,既可以是絕對地址也可以是相對地址。相對地址將被從當(dāng)前配置的文件夾開始推算,換言之,就是從這個(gè)定義映射的配置文件的路徑開始推算。
然后你可以在RewriteRule中如下使用這個(gè)映射:
RewriteRule ^/ex/(.*) ${examplemap:$1}
下列MapType和MapSource的組合是可用的:
txt:純文本映射,它的source是到一個(gè)可用的文本文檔的windows文件系統(tǒng)路徑。文本文檔必須是如下格式的:
#This is a comment key1 value1 #Another comment key2 value2 keyN valueN
rnd:隨機(jī)查找多個(gè)值。Source是一個(gè)文本文檔的路徑,文本文檔必須是以下格式:
#This is a comment key1 value1|value2|value3 key2 value4|value5|value6|valueN
int: 調(diào)用內(nèi)部函數(shù)。 Source必須是下列預(yù)定義的內(nèi)部函數(shù)之一:
• toupper: 轉(zhuǎn)換關(guān)鍵詞為大寫形式。
• tolower:轉(zhuǎn)換關(guān)鍵詞為小寫形式。
• escape:把特定字符編碼為十六進(jìn)制。
• unescape:把十六進(jìn)制值編譯為特定字符。
4.10RewriteLog指令
說明 | 設(shè)置ISAPI_Rewrite日志文件的名稱 |
語法 | RewriteLog file-path |
默認(rèn)值 | RewriteLog installdir\rewrite.log |
使用環(huán)境 | server config |
這個(gè)指令用來設(shè)定記錄ISAPI_Rewrite動(dòng)作的日志文件的文件名。示例:
Rewritelog "C:\local\path\rewrite.log"
4.11RewriteLogLevel指令
說明 | 設(shè)置日志級別 |
語法 | RewriteLogLevel Level |
默認(rèn)值 | RewriteLogLevel 0 |
使用環(huán)境 | server config |
這個(gè)指令設(shè)置日志的輸出長度。默認(rèn)值0表示不記日志,而最大的級別9則表示所有的動(dòng)作都要記錄。
使用使用較高的級別值可能會(huì)降低ISAPI_Rewrite的操作速度。我們建議你當(dāng)你完成規(guī)則調(diào)試之后,通過設(shè)置日志級別為零來禁用日志。
4.12RewriteOptions指令
說明 | 指定特殊選項(xiàng) |
語法 | RewriteOptions Options |
使用環(huán)境 | server config, virtual host, directory, .htaccess |
這個(gè)指令可以為ISAPI_Rewrite設(shè)置特定選項(xiàng)。當(dāng)前只有惟一一個(gè)選項(xiàng)可用:inherit。
inherit:強(qiáng)迫當(dāng)前配置從父級繼承所有的選項(xiàng)和規(guī)則。這意味著來自父級配置的所有的規(guī)則將被再次執(zhí)行,除非當(dāng)前環(huán)境另有相應(yīng)重寫規(guī)則。
4.13RewriteCompatibility2指令
說明 | 啟用或禁用ISAPI_Rewrite 2.x兼容模式 |
語法 | RewriteCompatibility2 on|off |
默認(rèn)值 | RewriteCompatibility2 off |
使用環(huán)境 | server config, virtual host, directory, .htaccess |
這一指令將激活與ISAPI_Rewrite 2.x版的兼容性,將一些2.X的規(guī)則正確地翻譯為3.0版本的語法。這并不意味著ISAPI_Rewrite 3將開始懂得不經(jīng)修改舊的語法。如果您有針對ISAPI_Rewrite 2.X的舊設(shè)計(jì)請使用ISAPI_Rewrite提供的翻譯工具將這些舊規(guī)則轉(zhuǎn)化為新的語法規(guī)則。
現(xiàn)在通過設(shè)置指令RewriteCompatibility2唯一改變的是,它將關(guān)閉網(wǎng)址常規(guī)前綴并刪除查詢字符串。 Apache的mod_rewrite將刪除匹配的URL的查詢字符串的這部分,相較之下ISAPI_Rewrite 2.X將匹配整個(gè)網(wǎng)址(包括查詢字符串在內(nèi)),而且[O]標(biāo)記的意思將由該指令倒置。
4.14ErrorLog指令
說明 | 一般的錯(cuò)誤文件的位置 |
語法 | ErrorLog file-path |
默認(rèn)值 | ErrorLog installdir\rewrite.log |
使用環(huán)境 | server config |
這個(gè)指令設(shè)置存放ISAPI_Rewrite整體錯(cuò)誤和消息的日志文件的名稱。例如httpd.conf file load, .htaccess file load,等等
例:ErrorLog "C:local\path\error.log"
4.15LogLevel指令
說明 | 設(shè)置一般的錯(cuò)誤的日志級別 |
語法 | LogLevel Level |
默認(rèn) | LogLevel warn |
使用環(huán)境 | server config |
這個(gè)指令設(shè)置一般日志的輸出長度,跟它的重寫過程無關(guān)。這里有一個(gè)level的可用值列表:emerg、alert、crit、error、warm、notice、info、debug。當(dāng)前的ISAPI_Rewrite日志只記錄錯(cuò)誤信息。
設(shè)置LogLevel調(diào)試來解決配置文件中加載的問題。
4.16<VirtualHost>指令
說明 | 把應(yīng)用于特定IP地或者主機(jī)的指令編組 |
語法 | <VirtualHost addr[:port] [addr[:port]] ...> ... </VirtualHost> |
使用環(huán)境 | server config |
<VirtualHost> ... </VirtualHost>標(biāo)簽用來對應(yīng)用到特定虛擬主機(jī)里的指令進(jìn)行分組。
addr的可用值為:
• 特定的IP地址
• 完整的域名
• 字符'*'可以匹配任何主機(jī)或者特定服務(wù)器的任何端口號(hào)。
例如:
RewriteEngine off AllowOverride none <VirtualHost onesite.com www.onesite.com> RewriteEngine on AllowOverride all </VirtualHost>
不要忘了在每個(gè)<VirtualHost>標(biāo)簽中包含RewriteEngine on指令,也不要將不能應(yīng)用的規(guī)則封裝進(jìn)去。
4.17<Directory>指令
說明 | 將適用于特定的文件系統(tǒng)的目錄和子目錄的指令編組 |
語法 | <Directory directory-path> ... </Directory> |
使用環(huán)境 | server config, virtual host |
<Directory> ... </Directory>標(biāo)簽被用來對應(yīng)用到特定文件系統(tǒng)目錄以及子目錄的指令進(jìn)行分組。通配符?和*是可用的。正則表達(dá)式也是可用的,需要以~字符打頭。
對目錄路徑參數(shù)必須小心:它們必須字面匹配用來訪問文件的文件系統(tǒng)路徑,用于某一特定<Directory>的指令并不適用于來自同一目錄下通過不同的路徑的文件訪問,例如通過不同的符號(hào)鏈接。只有完整的文件路徑是被允許使用的。
示例:
<Directory C:/inetpub/> AllowOverride None </Directory> <Directory C:/inetpub/home/> AllowOverride FileInfo </Directory> <Directory ~ "C:/inetpub/wwwroot/.*/[0-9]{3}"> # ... directives here ... </Directory>
不要忘了在每個(gè)<Directory>標(biāo)簽中包含RewriteEngine on指令,也不要將不能應(yīng)用的規(guī)則封裝進(jìn)去。
4.18<DirectoryMatch>指令
說明 | 將適用于特定的文件系統(tǒng)的目錄和子目錄的指令編組 |
語法 | <DirectoryMatch regex> ... </DirectoryMatch> |
使用環(huán)境 | server config, virtual host |
<DirectoryMatch> ... </DirectoryMatch> 被用來封裝一個(gè)只適用于指定的文件系統(tǒng)的目錄和子目錄的指令組。這個(gè)指令和<Directory ~> 語法相同。
示例:
<DirectoryMatch "^/www/(.+/)?[0-9]{3}"> # ... directives here ... </DirectoryMatch>
不要忘了在每個(gè)< DirectoryMatch>標(biāo)簽中包含 RewriteEngine on指令,也不要將不能應(yīng)用的規(guī)則封裝進(jìn)去。
4.19<Files> 指令
說明 | 將應(yīng)用于匹配文件名的指令包裝起來 |
語法 | <Files filename> ... </Files> |
使用環(huán)境 | server config, virtual host, directory, .htaccess |
<File>指令以文件名限定了封裝的指令的作用域。filename參數(shù)必須包含一個(gè)文件名,支持?和*以及以~字符打頭的正則表達(dá)式。
示例:
<Files index.*> # ... directives here ... </Files> <Files ~ "\.(gif|jpe?g|png)$"> # ... directives here ... </Files>
不要忘了在每個(gè)<Files>標(biāo)簽中包含RewriteEngine on指令,也不要將不能應(yīng)用的規(guī)則封裝進(jìn)去。
4.20<FilesMatch>指令
說明 | 將應(yīng)用于匹配文件名的指令包裝起來 |
語法 | <FilesMatch regex> ... </FilesMatch> |
使用環(huán)境 | server config, virtual host, directory, .htaccess |
<FilesMatch>指令的語法和_指令"><Files ~>語法完全一樣。
<FilesMatch "\.(gif|jpe?g|png)$">
不要忘了在每個(gè)<FilesMatch>標(biāo)簽中包含RewriteEngine on指令,也不要將不能應(yīng)用的規(guī)則封裝進(jìn)去。
4.21<Location>指令
說明 | 把被包裝起來的指令集應(yīng)用到匹配的URL或者虛擬路徑 |
語法 | <Location URL-path|URL> ... </Location> |
使用環(huán)境 | server config, virtual host |
<Location> ... </Location>標(biāo)簽用來將應(yīng)用到特定URL或者虛擬路徑的指令分組。<Location>將運(yùn)算符完全從文件系統(tǒng)中分劃出來,因此那些指令將不會(huì)用來控制對文件文件系統(tǒng)位置的訪問。因?yàn)橛袔讉(gè)不同的URL可能映射到相同的文件系統(tǒng)位置。
該URL-path是一個(gè)形式為“/path/”的虛擬路徑。沒有協(xié)議、主機(jī)名、端口號(hào)、查詢請求字符串被包含在內(nèi)。URL-path可以包含通配符?和*或者以~字符打頭的正則表達(dá)式。
示例:
<Location /directory> # ... rules go here </Location> <Location /> # ... more rules go here </Location>
不要忘了在每個(gè)<Location>標(biāo)簽中包含RewriteEngine on指令,也不要將不需要用到的規(guī)則封套進(jìn)去。
4.22<LocationMatch>指令
說明 | 把被包裝起來的指令集應(yīng)用到正則表達(dá)式匹配的URL上 |
語法 | <LocationMatch regex> ... </LocationMatch> |
使用環(huán)境 | server config, virtual host |
這個(gè)指令的語法和指令"><Location ~>正則表達(dá)式語法完全一樣。
示例:
<LocationMatch "/(home|section)/bin"> # ... rules go here </LocationMatch>
不要忘了在每個(gè)<LocationMatch>標(biāo)簽中包含RewriteEngine on指令,也不要將不能應(yīng)用的規(guī)則封裝進(jìn)去。
示例
簡單的搜索引擎友好的網(wǎng)址
下面這個(gè)例子演示了如何輕松地使用循環(huán)標(biāo)記藏匿查詢字符串參數(shù)。假設(shè)你有一個(gè)如下的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
請嘗試用下面的規(guī)則來達(dá)到預(yù)期的效果:
RewriteEngine on RewriteRule ^(.*?\.asp)/([^/]*)/([^/]*)(/.+)? $1$4?$2=$3 [NC,LP,QSA]注意這個(gè)規(guī)則可能破壞頁面與CSS文件、圖片等的相對鏈接。至所以這樣是因?yàn)樵跒g覽器中用于推算完整資源URI的基本路徑(頁面的父文件夾)發(fā)生了變化。只有在您使用目錄分隔符作為替代字符時(shí)才會(huì)發(fā)生這個(gè)問題。有三種可用的解決方案:
1.使用下面的規(guī)則,它不影響基本路徑,因?yàn)樗鼪]有用到目錄分隔符“/”。
2.借助于<base href="/folder/">標(biāo)簽直接為頁面指定正確的base路徑
3.把所有的頁面相對鏈接都變成相對于根目錄的地址或者絕對地址形式。
還存在著很多種用了不同的分隔符和文件擴(kuò)展名的規(guī)則。例如,使用像這樣的URL:http://www.myhost.com/foo.asp~a~A~b~B~c~C。下面的規(guī)則可以用來實(shí)現(xiàn)它:
RewriteEngine on RewriteRule ^(.*?\.asp)~([^~]*)~([^~]*)(.*) $1$4?$2=$3 [NC,LP,QSA]富關(guān)鍵詞URLs
在上面的例子中,我們使用很一般的技術(shù)來簡單地藏匿查詢字符串標(biāo)記。但是很多對搜索引擎優(yōu)化很有用的解決方案是讓您的URL關(guān)鍵字豐富?纯聪旅娴木W(wǎng)址,例如:http://www.mysite.com/productpage.asp?productID=127這是大部分網(wǎng)站的常見情況。但是你可以通過使用這樣形式的鏈接來顯著地提高你的網(wǎng)頁搜索引擎抓取率:http://www.mysite.com/products/our_super_tool.asp,URL中的關(guān)鍵詞“our super tool”會(huì)被索引,并提高網(wǎng)頁排名,但是“our_super_tool”不能直接被用來收回productid=127,這個(gè)問題存在幾種解決方案。
第一個(gè)解決方案,我們建議你使用簡短、只包含少數(shù)幾個(gè)參數(shù)(既有關(guān)鍵詞也有數(shù)字標(biāo)識(shí)符)的URL形式,在樣您的URL可能看起來如下:
http://www.mysite.com/products/our_super_tool_127.asp。實(shí)現(xiàn)這一重寫目標(biāo)只需要一個(gè)規(guī)則:
RewriteEngine on RewriteBase / RewriteRule ^products/[^?/]*_(\d+)\.asp /productpage.asp?productID=$1 [QSA]
另一個(gè)更復(fù)雜的解決方案是創(chuàng)建一對一的映射文件,并用它來映射“our_super_tool”到127。該解決方案對一些有很多參數(shù)的長URL來說很有用,并允許你隱藏?cái)?shù)字標(biāo)識(shí)符。這URL看起來像是http://www.mysite.com/products/our_super_tool.asp。請注意“our_supper_tool”部分必須是產(chǎn)品的唯一標(biāo)識(shí),是它的標(biāo)識(shí)符。下面是這種解決方案的一個(gè)示例:
RewriteEngine on RewriteBase / RewriteMap mapfile txt:mapfile.txt RewriteRule ^products/([^?/]+)\.asp /productpage.asp?productID=${mapfile:$1}
而且你必需創(chuàng)建包含以下內(nèi)容的mapfile.txt映射文件:
one_product 1 another_product 2 our_super_tool 127 more_products 335
這種方法的優(yōu)點(diǎn)是:你可以使用它來組合十分復(fù)雜的URL轉(zhuǎn)換,但是這是一個(gè)小例子,是這個(gè)指南中的題外之話。
使用IIS作為反向代理 假設(shè)你有運(yùn)行IIS的互聯(lián)網(wǎng)服務(wù)器以及幾臺(tái)后臺(tái)服務(wù)器或者應(yīng)用程序運(yùn)行在其它平臺(tái)或者機(jī)器上。這些服務(wù)器不能直接在互聯(lián)網(wǎng)上閱覽,但是你必須為他人提供訪問這些服務(wù)器的渠道。這里有一個(gè)演示如何簡單地將某個(gè)網(wǎng)站的完整內(nèi)容映射到另一個(gè)運(yùn)行了ISAPI_Rewrite的站點(diǎn)的文件夾的示例:
RewriteEngine on RewriteBase / RewriteRule mappoint(.+) http://sitedomain$1 [NC,P]
藏匿文件擴(kuò)展名: 雖然不可能將一個(gè)站點(diǎn)的所有的文件的擴(kuò)展名都藏匿起來,但是我們可以使用ISAPI_Rewrite的文件檢查功能來隱藏某些已知擴(kuò)展名。這里有一個(gè)藏匿網(wǎng)站上.asp文件擴(kuò)展名的規(guī)則示例:
RewriteEngine on #Redirect extension requests to avoid duplicate content RewriteRule ^([^?]+)\.asp$ $1 [NC,R=301,L] #Internally add extensions to request RewriteCond %{REQUEST_FILENAME}.asp -f RewriteRule (.*) $1.asp
仿真基于主機(jī)頭的虛擬網(wǎng)站 例如你已經(jīng)注冊了兩個(gè)域名www.site1.com和www.site2.com。現(xiàn)在你可以使用同一個(gè)物理站創(chuàng)建兩個(gè)不同的站點(diǎn)了。這里是一個(gè)規(guī)則示例:
RewriteEngine on #Fix missing trailing slash char on folders RewriteRule ^([^.?]+[^.?/])$ $1/ [R,L] #Emulate site1 RewriteCond %{HTTP:Host} ^(?:www\.)?site1\.com$ RewriteRule (.*) /site1$1 [NC,L,NS] #Emulate site2 RewriteCond %{HTTP:Host} ^(?:www\.)?site2\.com$ RewriteRule (.*) /site2$1 [NC,L,NS]
現(xiàn)在只要把你的站點(diǎn)分別放到/site1和/site2目錄下就可以了。注意www.site1.com和www.site2.com這兩個(gè)域名必須在IIS中被映射到這個(gè)網(wǎng)站里,從而使ISAPI_Rewrite能攔截到請求。
或者,你可以使用更多通用的規(guī)則,從而把任何請求都映射到與請求主機(jī)名同名的文件夾里。
RewriteEngine on #Fix missing trailing slash char on folders RewriteRule ^([^.?]+[^.?/])$ $1/ [R,L] #Map requests to the folders RewriteCond %{HTTP:Host} ^(www\.)?(.+) RewriteRule (.*) /%2$1 [NS]
網(wǎng)站的目錄名應(yīng)該是這樣子的:/somesite1.com,/somesite2.info,等等。
阻斷內(nèi)聯(lián)圖像(阻止盜鏈) 假如你有一些頁面插入了http://www.mysite.com/下的gif圖片。一些其它站點(diǎn)將通過網(wǎng)頁超鏈接插入這些圖片。這會(huì)給你的網(wǎng)站增加很多無用的通訊量,而且你希望阻止這種做法。
雖然用ISAPI_Rewrite不能100%地保護(hù)圖片不被盜鏈(只有專門的反盜鏈產(chǎn)品才能做到它),你至少可以在瀏覽器發(fā)來HTTP引用頭的時(shí)候限制這種情況。下面的規(guī)則可以讓你只允許來自同一主機(jī)的引用頁或者空地址訪問到這些圖片。
RewriteEngine on RewriteCond %{HTTP:Host}#%{HTTP:Referer} ^([^#]+)#(?!http://\1).+ RewriteRule .*\.(?:gif|jpg|png) /block.gif [NC]
重定向非www的版本到www
如果你的網(wǎng)站同時(shí)可以通過兩種形式的URL比如說http://helicontech.com和http://www.helicontech.com來訪問到,那么最好將一種地址重定向到另一種地址里,來避免搜索引擎對重復(fù)內(nèi)容做出的處罰。下面是一個(gè)能將所有的非www地址重定向到相應(yīng)的www地址上去的301重定向規(guī)則。
RewriteEngine on RewriteCond %{HTTPS} (on)? RewriteCond %{HTTP:Host} ^(?!www\.)(.+)$ [NC] RewriteCond %{REQUEST_URI} (.+) RewriteRule .? http(?%1s)://www.%2%3 [R=301,L]
強(qiáng)制SSL或者非SSL到一個(gè)指定的位置
這里是一個(gè)演示如何將SSL強(qiáng)制轉(zhuǎn)到指定的文件夾的示例。只要簡單地把下面的規(guī)則放到該文件夾下的.htaccess文件里就可以了。
RewriteEngine on #Fix missing trailing slash char on folders RewriteRule ^([^.?]+[^.?/])$ $1/ [R,L] #Redirect non-HTTPS to HTTPS RewriteCond %{HTTP:Host} (.*) RewriteCond %{HTTPS} off RewriteCond %{REQUEST_URI} (.*) RewriteRule .? https://%1%2 [R,L]
而這個(gè)示例作用正好相反:將非SSL強(qiáng)制轉(zhuǎn)到指定文件夾。
RewriteEngine on #Fix missing trailing slash char on folders RewriteRule ^([^.?]+[^.?/])$ $1/ [R,L] #Redirect HTTPS to non-HTTPS RewriteCond %{HTTP:Host} (.*) RewriteCond %{HTTPS} on RewriteCond %{REQUEST_URI} (.*) RewriteRule .? http://%1%2 [R,L]
轉(zhuǎn)移站點(diǎn)位置
當(dāng)你把網(wǎng)站從一個(gè)域名移到另一個(gè)域名,或者從一個(gè)文件夾移動(dòng)另一個(gè)文件夾里的時(shí)候,這是經(jīng)常會(huì)遇到的問題。你希望將一個(gè)網(wǎng)站的所有請求重定向到另一個(gè)網(wǎng)站里,而且不丟失請求資源名以及參數(shù)。當(dāng)你希望保留現(xiàn)有的網(wǎng)頁的排名和外鏈接的時(shí)候,它是非常有用的。這個(gè)解決方案是在舊的網(wǎng)站服務(wù)器上使用ISAPI_Rewrite:
RewriteEngine on #Permanent redirect to update old links RewriteRule (.+) http://newserver.com$1 [R=301,L]
平衡負(fù)荷仿真
這個(gè)示例模擬某種DNS輪換負(fù)荷平衡技術(shù)。假設(shè)你有主站www.mysite.com和數(shù)臺(tái)web服務(wù)器分別注冊為www[1-9].mysite.com。如果你在主服務(wù)器上安裝了ISAPI_Rewrite,你可以將初始的客戶端請求重定向到幾臺(tái)特定服務(wù)器,從而在幾臺(tái)服務(wù)器之間隨機(jī)攤開通訊量。一旦已重定向,客戶端將一直使用這一臺(tái)服務(wù)器。雖然這種解決方案并不非常理想,但是它確實(shí)能分?jǐn)偰愕耐ㄓ嵙坎⒈苊庠诰S護(hù)會(huì)話狀態(tài)方面發(fā)生的問題。
使用下面的規(guī)則來重定向客戶端:
RewriteEngine on RewriteMap hosts rnd:hosts.txt RewriteCond %{HTTP:Host} (www)\.mysite.com [NC] RewriteRule (.*) http://${hosts:%1}.mysite.com$1 [R,L]
下面是hosts.txt文件的內(nèi)容
www www1|www2|www3|www4|www5|www6|www7|www8|www9
你還可以在Apeche文檔里找到很多其它有用的例子。它們多數(shù)不需要修改就可以在ISAPI_Rewrite3里使用。
故障處理
在這里你可以一步步找到你在安裝ISAPI時(shí)遇到的問題的解決方法。
1.首先要正確解決您的問題,我們需要你運(yùn)行最新的可用版本的ISAPI_Rewrite軟件。你可以隨時(shí)到我們的網(wǎng)站下載最新版的軟件來升級你的ISAPI_Rewrite。地址是http://www.helicontech.com/download-isapi_rewrite3.htm 。
2.多數(shù)運(yùn)行ISAPI_Rewrite的問題發(fā)生在服務(wù)器上NTFS權(quán)限限制上。所以,請先閱讀需要運(yùn)行ISAPI_Rewrite文件的權(quán)限。
3.請檢查應(yīng)用程序和系統(tǒng)日志中的錯(cuò)誤信息。這可能指出您的錯(cuò)誤原因。
4.不要忘記設(shè)置RewriteEngine on指令在你所用的每個(gè)配置文件中。
5.把下列代碼行放到httpd.conf文件中:
RewriteLogLevel 9 LogLevel debug它將創(chuàng)建error.log和rewrite.log兩個(gè)日志文件,默認(rèn)放在安裝目錄下。如果日志文件被創(chuàng)建了,它表明ISAPI_Rewrite正在運(yùn)行。閱讀作為結(jié)果的error.log和rewrite.log文件,將能告訴你一些問題的根源線索。
6.如果httpd.conf規(guī)則正在生效,但是.htaccess文件卻沒有載入,請?jiān)俅螜z查.htaccess文件的NTFS權(quán)限,并確保你沒有在使用ISAPI_Rewrite的精簡版。
7.如果規(guī)則在httpd.conf里能生效,但是有其它部分或者.htaccess文件里不能生效,請確保在每個(gè)部分的或者.htaccess文件里包含RewriteEngine on指令。同樣的,不要忘掉.htaccess文件里的默認(rèn)rewriting base值與httpd.conf是不同的。在.htaccess文件里或者<Directory>部分里,ISAPI_Rewrite會(huì)自動(dòng)從路徑中剝離本地目錄前綴并只對剩下的部分應(yīng)用規(guī)則。所以如果你的規(guī)則以“/”字符開頭的話,在網(wǎng)站根目錄的.htaccess文件中它必須被去掉。
如果你在使用ISAPI_Rewrite時(shí)依然有問題,請到技術(shù)支持論壇里來寫下你的問題,或者發(fā)送電子郵件到技術(shù)支持郵箱里。
請?jiān)谀闹С终埱罄锇ㄒ韵滦畔ⅲ?br />1.您的ISAPI_Rewrite配置文件,包括路徑和文件名。
2.您的網(wǎng)站的地址鏈接。
3.你用到測試你的規(guī)則的URL。
4.與失敗的請求error.log和rewrite.log的文件副本。
5.包括失敗的請求的部分IIS日志文件。
請記住你提供的信息越多,我們越容易為你解決問題。這樣你更有機(jī)會(huì)快速地得到解決方案。
ISAPI_Rewrite 發(fā)布?xì)v史
發(fā)布 3.1.0.67
================
[篩選器功能] 增強(qiáng)映射文件的動(dòng)態(tài)加載
[代理幫助文件錯(cuò)誤]如果后端不設(shè)置內(nèi)容長度頭的話,并不會(huì)返回所有的響應(yīng)。
發(fā)布 3.1.0.66
================
精簡版的限制
ISAPI_Rewrite的精簡版擁有相同的引擎和重寫功能。但是也有下面這些限制:
? 不支持分布式.htaccess配置、目錄以及網(wǎng)站級配置,只有一個(gè)精簡版安裝目錄中的全局的httpd.conf配置能被載入。
? 不支持<VirtualHost>、<Directory>、<DirectoryMatch>、<Files>、<FilesMatch>、<Location> 以及<LocationMatch>這幾個(gè)標(biāo)簽。
? 精簡版中沒有代理服務(wù)模塊,因而所有的和代理服務(wù)功能相關(guān)的比如說RewriteProxy指令以及[P]標(biāo)記都會(huì)被忽略。
? 精簡版沒有針對于虛擬主機(jī)環(huán)境的手工安裝包
ISAPI_Rewrite精簡版完全免費(fèi),它對開發(fā)或者測試目的以及只有幾個(gè)網(wǎng)站而且不需要分布式配置或者代理功能的小型服務(wù)器來說是一個(gè)很好的解決方案
技術(shù)信息 ISAPI_Rewrite由四個(gè)部分組成:ISAPI篩選器、ISAPI擴(kuò)展幫助、GUI管理器以及MMC嵌入式管理單元擴(kuò)展。ISAPI_Rewrite篩選器和擴(kuò)展都是用純C++語言寫的快速DLL模塊。當(dāng)安裝ISAPI_Rwrite的時(shí)候, MMC嵌入式管理單元會(huì)被自動(dòng)注冊。ISAPI篩選器將安裝在一個(gè)全局級別上,你不需要手工注冊它。ISAPI擴(kuò)展也會(huì)被安裝并注冊。
ISAPI_Rewrite管理器實(shí)用工具可以在沒有安裝MMC的系統(tǒng)中運(yùn)行ISAPI_Rewrite MMC嵌入式管理單元。
Windows Vista以及Windows Server 2008系統(tǒng)中的ISAPI_Rewrite管理器實(shí)用工具(Helicon Manager.exe)要求管理員權(quán)限來執(zhí)行,因?yàn)檩^小權(quán)限的用戶沒有權(quán)力讀取IIS管理元庫,而它對顯示網(wǎng)站配置來說是必需的。如果用受限的帳號(hào)運(yùn)行ISAPI_Rewrite管理器,你會(huì)得到登錄管理員帳號(hào)的自動(dòng)提示。
ISAPI_Rewrite篩選器已經(jīng)有足夠地快,因此不用擔(dān)心它的性能。除非你的服務(wù)器運(yùn)行在最大負(fù)荷之下。用戶在響應(yīng)時(shí)間或者CPU負(fù)荷方面幾乎不能發(fā)現(xiàn)什么區(qū)別,但是如果用了很多的規(guī)則的話,服務(wù)器最大帶寬可能掉下一點(diǎn)來。所以請注意你用的配置決定了性能。建議每個(gè)網(wǎng)站使用的規(guī)則不要超過100條。在多數(shù)情況下,可以利用RewriteMap來避免使用大量的規(guī)則。
該程序使用了Regex++ 庫。
Regex++ (Version Boost 1.31)
Copyright ?1998-2004, Dr John Maddock
使用和傳播許可
該使用許可覆蓋了所有的現(xiàn)有版本的ISAPI_Rewite,包括ISAPI_Rewrite、ISAPI_Rewrite完全版、ISAPI_Rewrite精簡版、ISAPI_Rewrite測試版,后面統(tǒng)稱為ISAPI_Rewrite除非另有指明。
1.所有未明確授予的權(quán)利均由Helicon Tech保留。
2.所有的關(guān)于ISAPI_Rewrite的版權(quán)都由它的作者Helicon Tech獨(dú)家保留。
3. Helicon Tech準(zhǔn)予免費(fèi)使用ISAPI_Rewrite精簡版產(chǎn)品。
4. Helicon Tech準(zhǔn)予免費(fèi)試用ISAPI_Rewrite產(chǎn)品30天,當(dāng)試用期結(jié)束時(shí),請要么購買ISAPI_Rewrite,要么刪除ISAPI_Rewrite產(chǎn)品。
5.未注冊過的ISAPI_Rewrite試用版,可以在不被改動(dòng)的前提下自由傳播,除非有下例情況。任何個(gè)人或者公司都不用為在未得版權(quán)持有人書面許可的情況下傳播ISAPI_Rewrite而付費(fèi)。未經(jīng)版權(quán)持有者的書面許可,未注冊的試用版ISAPI_Rewrite不允許捆綁其它安裝包。
6. ISAPI_Rewrite必須被原樣傳播,不提供任何形式的保證明示或暗示。你可以在你自己的磁盤上使用ISAPI_Rewrite。作者不為因?yàn)闉E用本軟件導(dǎo)致的數(shù)據(jù)丟失、損壞,或任何其他類型的損失承擔(dān)責(zé)任。
7.你不得使用、復(fù)制、模仿、克隆、出租、出售、修改、反編譯、反匯編以及其它任何反向工程,或者轉(zhuǎn)讓許可程序,或者任何許可程序的一個(gè)子集,除非本協(xié)議有提供。任何未經(jīng)授權(quán)的使用將導(dǎo)致本許可自動(dòng)終止。并可能導(dǎo)致刑事或民事起訴。
8.本許可協(xié)議的條款是在未來版本的ISAPI_Rewrite將會(huì)有所變化。
9.當(dāng)你購買ISAPI_Rewrite時(shí),將發(fā)給你“注冊碼”。這種“注冊碼”可以個(gè)人或者公司購買,并只在一臺(tái)計(jì)算機(jī)上使用。如果您購買一個(gè)以上的ISAPI_Rewrite副本,發(fā)給你們的“注冊碼”只能在等于你購買的許可證數(shù)的計(jì)算機(jī)上使用。
10.您只能使用來自Helicom Tech以及與Helicom Tech有業(yè)務(wù)合作或者技術(shù)合作的公司的注冊碼。
11. 安裝和使用ISAPI_Rewrite意味著接受這些條款及許可條件。
12. 如果您不同意本許可證的條款或違反本許可與您當(dāng)?shù)氐姆梢?guī)定,您必須從您的存儲(chǔ)設(shè)備中刪除ISAPI_Rewrite文件,并停止使用該產(chǎn)品。
13.我們堅(jiān)持嚴(yán)格的隱私的準(zhǔn)則,不會(huì)收集個(gè)人識(shí)別信息,除非是自愿提供的。
如果您有進(jìn)一步的問題或意見,請?jiān)L問我們的http://www.helicontech.com。
感謝你使用ISAPI_Rewrite。
Helicon Tech Corporation.
轉(zhuǎn)自:asprain