|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
当你经过一段时间的学习后就应该扩充自己的知识,多学习linux命令,但是不要在初学阶段就系统的学习linux命令。
<divclass="start">第一章:软件先容
ISAPI_Rewrite是一款合用于IIS的功效壮大的基于正则表达式的URL处置模块。它兼容Apache的mod_rewrite的语法,从而使仅仅复制.htaccess文件就把设置从appach移植到IIS中大概从IIS移值到appach中酿成大概。请参阅3.2兼容性图表这一节。
ISAPI_Rewrite最主要的功效:
ISAPI_Rewrite供应了和Apachmod_rewrite不异的句法和举动,使仅仅拷贝.htaccess文件就完成设置移植成为功效。(要想浏览更多关于与mod_rewrite的兼容性,请参阅3.2兼容性图表这一节。)
正则表达式撑持天真而壮大的设置。
极速并且简单晋级的纯C++代码。
真实的散布式设置:及时监控服务器全局级别、假造主机(网站)级别、目次级其余.htaccess文件。
断绝性:用户级设置只影响当地用户情况,从而使ISAPI_Rewrite成为Web主机供应商的幻想办理计划。
主要的使用示例:
seo。
一台Web服务器的代办署理内容经由另外一台web服务器。
避免内容被吸血(盗链)。
阻断特定主机、反向链接大概烦人的搜刮呆板人。
内容协商:向分歧的言语用户大概分歧的扫瞄器用户供应分歧的文件。示例
为聚集式服务器架构摹拟负载平衡。
订价材料
45天的试用期
单机版99美圆
ISAPI_Rewrite精简版是收费的。在这里能够看到受限的细节申明。
大批推销可议扣头。
2.1体系请求
ISAPI_Rewrite能够被安装鄙人列操纵体系中:
Windows2000withIIS5
WindowsXPwithIIS5.1
WindowsServer2003withIIS6.0
WindowsVistawithIIS7.0
WindowsServer2008withIIS7.0
在安装ISAPI_Rewrite之前,操纵体系中必需先安装IIS。
32位和64位的Windows版本都是撑持的,可是你必需下载32位版和64位版两种分歧的安装包。WindowsInstaller2.0必需运转安装程序。你能够从微软的网站高低载到最新版本的WindowsInstaller。
在WindowsVista和WindowsServer2008上安装ISAPI_Rewrite,还必需先安装上面两个模块(默许情形下这两个模块是不安装的)
ISAPI过滤器
ISAPI扩大
2.2安装程序
在运转安装包之前请先浏览体系请求部分。下载并安装某个版本的ISAPI_Rewrite.msi,按照安装导游的申明操纵。安装历程是主动的,并有自我形貌。ISAPI_Rewrite在主动安装过程当中必需重启IIS。以下服务必需被重启:IISADMIN、W3SVC。不必要手工把任何ISAPI选择器大概扩大到场到网站大概全局列表中。它可以在安装和设置过程当中主动完成。
命令行安装
ISAPI_Rewrite也可以经由过程命令行举行背景安装。请利用以下命令行语法来安装:
.代码以下:
msiexec/iISAPI_Rewrite3.msi/qnAcceptEULA=YesREGISTRATIONCODE=Code
REGISTRATIONNAME=Name
用命令行来背景反安装ISAPI_Rewrite请利用上面的语法:
.代码以下:
msiexec/xISAPI_Rewrite3.msi/qnKEEPUSERFILES=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上全局地安装它。
在Window2000,WindowXP和WindowsServer2003中注册ISAPI选择器,不管是全部IIS服务器要用它仍是一般WEB网站要用它,都要用IIS的MMC办理单位来把ISAPI_Rewrite.dll添到ISAPI选择器列表。在WindowsVista和WindowsServer2008中起首你必要安装可选IIS组件:万维网服务、使用程序开辟功效、ISAPI选择器。
假如你必要代办署理服务器功效,你还必要将ISAPI_RewriteProxy.dll注册为ISAPI扩大来侍服文件扩大名“*.rwhlp”。在分歧的IIS版本中请求分歧的操纵。请参阅你办理的IIS版本的文档来懂得怎样注册一个新的ISAPI扩大并把它映照到IIS体系的文件扩大名上。在WindowsVista和windowsserver2008起首必需安装可选的IIS组件:万组网服务、使用程序开辟功效、ISAPI选择器。利用短路径名(8.3形式)作为ISAPI_RewriteProxy.dll的模块路径,假如路径里有一个空格字符,IIS载进这个模块时将失利。
把httpd.conf文件放在ISAPI_Rewrite.dll文件的统一目次下并编纂它。
把以下两行内容放到httpd.conf文件中以注册ISAPI_Rewrite产物:
RegistrationName=Yourregistrationname
RegistrationCode=REG-CODE-PROVIDED-FROM-HELICON按照“运转ISAPI_Rewrite的权限需求”这一部分的申明来反省文件体系权限。
2.4反安装
反安装程序会删除一切安装程序所天生的文件、从办理元库中刊出选择器,并删除一切由安装程序所增加的别的办理元库变更。假如用户决意在反安装过程当中保存用户文件的话,以下用户数据文件在反安装后会被留上去。
文件名申明ProgramFiles/Helicon/ISAPI_Rewrite/httpd.conf用户划定规矩的主设置文件ProgramFiles/Helicon/ISAPI_Rewrite/error.log包括毛病日记的文件ProgramFiles/Helicon/ISAPI_Rewrite/rewrite.log包括重写日记的文件.htaccess(variousfolders)用户创立的含有划定规矩的设置文件“删除用户创立的文件”的选项在将反安装过程当中供应给用户。假如启用这个选项则卸载程序也将删除位于ProgramFiles文件夹里用户创立的文件。.htaccess文件不会被删除。
要用命令行背景卸载ISAPI_Rewrite,请利用上面的语法:
.代码以下:
msiexec/xISAPI_Rewrite3.msi/qnKEEPUSERFILES=Yes
2.5运转ISAPI_Rewrite所需的权限
在一个洁净的默许Windows体系上主动安装ISAPI_Rewrite不请求任何权限调剂。可是一些别的产物好比说Plesk、IIS锁定工具的安装,等等,大概收紧服务器的平安性,并妨害ISAPI_Rewrite的一般运转。上面是ISAPI_Rewrite的权限需求的列表票据:
在Windows2000、WindowsXP和Windows2003的IIS5兼容形式下,选择器运转在System帐户下的inetinfo.exe历程中。谁人system帐户最少得被授与安排ISAPI_Rewrite安装文件的谁人文件夹的“读取”和“目次扫瞄”的权限。我们还倡议赐与system帐号对这个文件夹的一样平常修正权。这将同意天生一些包括剖析大概别的毛病的文件。system帐号还必需在任何包括了.htaccess文件的网站文件夹里一样被授与这些权限,不然ISAPI_Rewrite将不克不及加载并监督它。
请稍寄望ISAPI_Rewrite安装目次上的任何一点回绝权限设置,由于在Windows操纵体系中,回绝权限优先于任何同意权限纪录。
在Windows2003的自然IIS形式(WPI形式)和WindowsServer2008中,不管是选择器仍是代办署理服务都运转在每一个网站响应的运转程序池的w3p.exe事情历程中,每一个使用程序池都可使用它本人的定制来设置,这大概使权限设置成了一种庞大的事情。但是,在一个准确的IIS设置中,每一个利用中的定制必需是IIS_WPG组的一个成员。因而,IIS_WPG组能够被用来取代System帐号往分派后面所写的权限需求。
在WindowsVista中权限设置是和Windows2003的设置差未几的,只是它没有IIW_WPG组。以是,一切的WPI帐号(一样平常NetworkService是它的唯一帐号)都必需授与上述必须权限。
别的,为了让代办署理服务功效能事情,你必需在网站属性大概运转代办署理服务的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/addkeyISAPI_Rewrite3
IIS:/LM/W3SVC/Filters/FilterLoadOrderappend"ISAPI_Rewrite3"
利用一个可实行文件(dll)
产生在:安装。
RemoveFilterFromMetabase
从办理元库中删除选择器这个举动从IIS办理元库里移除名为ISAPI_Rewrite3的全局ISAPI选择器。
IIS5,IIS6办理元库:IIS://localhost/W3SVC/LM/W3SVC/Filters/deletekeyISAPI_Rewrite3
IIS:/LM/W3SVC/Filters/FilterLoadOrderremove"ISAPI_Rewrite3"
利用一个可实行文件(dll)
产生在:反安装、回滚。AddApplicationExtension
增加使用程序扩大只用于Windows2003呆板增加ISAPI_RewriteProxy.dll到ISAPI扩大中,并使Web服务器扩大名列表中的这个ISAPI扩大名可用。
IIS6办理元库:IIS:/LM/W3SVC/
addsentrytothe在办理元库属性WebSvcExtRestrictionList中增添metabaseproperty"ISAPI_Rewrite3proxy"条目;
在办理元库属性ApplicationDependencies增添"ISAPI_Rewrite3proxy;ISAPI_Rewrite3"条目;
利用一个可实行文件(dll)
产生在:安装。RemoveApplicationExtension
删除使用程序扩大只用于Windows2003从ISAPI扩大中删除ISAPI_RewriteProxy.dll,并从web服务器扩大名列表中删除这个ISAPI扩大名。
IIS6办理元库:IIS:/LM/W3SVC/
1.从办理元库属性WebSvcExtRestrictionList中删除"ISAPI_Rewrite3proxy"条目;
2.从办理元库属性ApplicationDependencies中删除"ISAPI_Rewrite3proxy;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/AppPoolspropertyEnable32bitAppOnWin64;
利用msi属性:[ENABLE32BITAPPONWIN64]
反省一个32位的使用程序是不是能运转在一台安装了64位版本的windows的电脑上。
利用javascript剧本
产生在:安装。CheckIISModules
检测IIS模块在IIS7的呆板上反省是不是必要安装IsapiFilterModule和IsapiModule模块
IIS7办理元库路径:
<system.webServer>
<globalModules>
<addname="IsapiModule"image="%windir%System32inetsrvisapi.dll"/>
<addname="IsapiFilterModule"image="%windir%System32inetsrvfilter.dll"/>
</globalModules>
</system.webServer>
利用javascript剧本
产生在:安装。AddGlobalIsapiFilter
增加全局ISAPI选择器只用于IIS7的呆板。这个举动会在IIS办理元库里增加一个定名为ISAPI_Rewrite3的全局ISAPI_Rewrite选择器
IIS7的办理元库路径:
<configuration>
<system.webServer>
<isapiFilters>
<filters>
<filtername="ISAPI_Rewrite3"path="C:ProgramFilesHeliconISAPI_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>
<filtername="ISAPI_Rewrite3"path="C:ProgramFilesHeliconISAPI_Rewrite3ISAPI_Rewrite.dll"enabled="true"enableCache="false">
</filter>
</filters>
</isapiFilters>
</system.webServer>
</configuration>
利用JavaScript剧本
产生在:反安装、回滚。AddIsapiCgiRestriction
增加ISAPICGI束缚OnlyforIIS7machinesregisterISAPI_RewriteProxy.dllasISAPIextensioninIISmetabase.
只用于IIS7的呆板,在IIS办理元库中将ISAPI_RewriteProxy.dl为ISAPI扩大
IIS7办理元库路径:
<configuration>
<system.webServer>
<security>
<isapiCgiRestriction>
<addpath="C:ProgramFilesHeliconISAPI_Rewrite3ISAPI_RewriteProxy.dll"allowed="true"description="HeliconProxy"/>
</isapiCgiRestriction>
</security>
</system.webServer>
</configuration>
利用JavaScript剧本
产生在:安装。DeleteIsapiCgiRestriction
删除ISAPICGI束缚只用于IIS7的呆板,从IIS办理元库中删除用作ISAPI扩大的ISAPI_RewriteProxy.dll。
IIS7办理元库路径:
<configuration>
<system.webServer>
<security>
<isapiCgiRestriction>
<addpath="C:ProgramFilesHeliconISAPI_Rewrite3ISAPI_RewriteProxy.dll"allowed="true"description="HeliconProxy"/>
</isapiCgiRestriction>
</security>
利用JavaScript剧本
产生在:反安装、回滚。AddScriptMap
增加剧本映照只用于IIS7的呆板,在IIS办理元库中将ISAPI_RewriteProxy.dll注册为ISAPI扩大用于处置*.rwhlp文件扩大名。
IIS7办理元库路径:
<configuration>
<system.webServer>
<handlers>
<addname="HeliconProxy"path="*.rwhlp"verb="*"modules="IsapiModule"scriptProcessor="C:Program
FilesHeliconISAPI_Rewrite3ISAPI_RewriteProxy.dll"resourceType="Unspecified"/>
</handlers>
</system.webServer>
</configuration>
利用JavaScript剧本
产生在:安装。DeleteScriptMap
删除剧本映照只用于IIS7的呆板,从IIS办理元库里往除用作ISAPI扩大以处置*.rwhlp文件扩大名的ISAPI_RewriteProxy.dll的注册
IIS7办理元库路径:
<configuration>
<system.webServer>
<handlers>
<addname="HeliconProxy"path="*.rwhlp"verb="*"modules="IsapiModule"scriptProcessor="C:Program
FilesHeliconISAPI_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的正则表达式(plusextendedsyntax)
・服务器级httpd.conf设置
・假造网站.htaccess设置文件
・目次.htaccess设置文件
・<VirtualHost>
・<Directory>
・<DirectoryMatch>
・<Files>
・<FilesMatch>
・<Location>
・<LocationMatch>
・AccessFileName
・RewriteEngine
・RewriteRule
o$N划定规矩后向援用
o%NRewriteCond后向援用
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
otxt:文本映照
ornd:随机映照
oint:外部函数toupper,tolower,escape,unescape
oprg:内部程序
odbm:散列文件
・RewriteLog
・RewriteLogLevel
・RewriteOptions
・RewriteLock
・AllowOverride
3.3利用情况和处置按次
以下是这个程叙文档中要被用到的利用情况的详解:
serverconfig
这个标记暗示该指令能够用在全局httpd.conf设置文件中,可是不克不及用在任何一个分区(比方<Virtualhost>大概<Directory>)外部。它不同意放在.htaccess文件中。
vitrualhost
这意味着指令能够呈现在<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++文档的一部分,由JohnMaddock博士友谊供应,Copyright?1998-2004,包括在《Boostlicense》这本书里。完全的语法申明能够在《Boost.Regexdocumentation》中找到。
字面值
所的字符都是字面值,除“.”“*”“?”“+”“(”“)”“{”“}”“[”“]”“^”和“$”。当这些字符由“”前导时也是字面值。一个字面值是个婚配它本人的字符。
通配符
点字符“.”婚配空字符和换行符之外的任何单个字符。
反复
反复是被反复恣意次数的表达式。一个表达式随着“*”能够被反复恣意次数,包含反复零次。一个表达式随着“+”能够被反复恣意次数,可是最少反复一次。一个表达式随着“?”能够被只反复零次大概一次。当必要明白指定反复的最低次数和最高次数时,能够用限制运算符“{}”。如许“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就是全部表达式。
正则表达式
无标志拔出
偶然候你必要把子表达式编组为拔出成分,可是不想为这个拔出成份而吐出另外一个标志的子表达式。在这类情形下,一个非标志拔出(?: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-Fword一切的辞汇字符,包含字母数字外加underscoreunicode一切的编码年夜于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.]完整一样的。
Equivalenceclassestakethegeneralform[=tagname=]insideasetdeclaration,wheretagnameiseitherasinglecharacter,oranameofacollatingelement,andmatchesanycharacterthatisamemberofthesameprimaryequivalenceclassasthecollatingelement[.tagname.].Anequivalenceclassisasetofcharactersthatcollatethesame,aprimaryequivalenceclassisasetofcharacterswhoseprimarysortkeyareallthesame(forexamplestringsaretypicallycollatedbycharacter,thenbyaccent,andthenbycase;theprimarysortkeythenrelatestothecharacter,thesecondarytotheaccentation,andthetertiarytothecase).Ifthereisnoequivalenceclasscorrespondingtotagname,then[=tagname=]isexactlythesameas[.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"婚配词语中的空字符串。
本义字符
本义字符“”含有多重意义:
•本义字符能够引诱一个运算符,比方:回溯援用、词操纵符
•本义字符可使上面的字符一般,好比说“*”代表一个字面值“*”,而不是反复运算符。
单个字符本义序列
上面的本义序列是单个字符的别号:
本义序列字符代码寄义a0x07旌旗灯号铃暗号. 0x09制表符v0x0B垂直制表符e0x1BASCII本义字符 dd0dd八进制字符代码,个中dd是一个或多个八进制数字。xXX0xXX十六进制字符代码,个中XX是一个或多个八进制数字。x{XX}0xXX十六进制字符代码,个中XX是一个或更多十六进制数字,可选用Unicode字符。cZz-@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利用比封演算法。只要表达式婚配了全部按次串才干失掉婚配了局。比方:
•RewriteCondURL^/somedir/.*#将婚配任何导向somedir目次和它的子目次的哀求,与此同时,
•RewriteCondURL^/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将给客户端发送一个"InternalServererror-RuleFailed"的形态,以暗示设置毛病。
4.1AccessFileName指令
申明设置散布式设置文件的称号语法AccessFileNamefilename[filename]...默许值AccessFileName.htaccess利用情况serverconfig指定一个ISAPI_ReWrite追求散布式设置的文件名列表。默许文件名是.htaccess。ISAPI_ReWrite只能载进它能在这个列表中找到的第一个文件。默许情形下ISAPI_ReWrite办理者会以hidden属性标志设置文件-它将避免文件被远程用户间接会见到。
假如设置文件举行了任何修正,它将鄙人次哀求服务器时主动加载。
4.2AllowOverride指令
申明明白划定了每一个目次重写的基准URL。语法AllowOverrideAll|None|directive-type[directive-type]...默许值AllowOverrideAll利用情况serverconfig,virtualhost,directory这个指令声了然在散布式.htaccess文件里的指令是不是能够掩盖父级其余httpd.conf中的指令。在ISAPI_Rewrite的利用情况中,这个指令实践上把持了特定假造主机大概目次的.htaccess文件的可用大概不成用。今朝只撑持三个值:All、None和FileInfo。
All和FileInfo使.htaccess文件和它内里的全部ISAPI_Rewrite目次可用,None使一切的.htaccess文件和目次不成用。这些目次具有承继性。这意味着假如你为一些目次大概假造主机指定AllowOverridenone,.htaccess文件将对全部子目次树不成用。
4.4RewriteRule指令
申明界说URL重写划定规矩语法RewriteRulePatternSubstitution[flags]利用情况serverconfig,virtualhost,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}cxASCII的本义字符x,比方c@等价于escape-@。eTheASCII本义字符dd八进制字符常量,比方10。l招致下一个字符被小写输入。u招致下一个字符被年夜写输入。L招致全部后继字符串被小写输入,直到碰到E。U招致全部后继字符串被年夜写输入,直到碰到E。E停止L大概U的后续字符串单个反斜杠字符<P>RewriteRule从父设置文件入手下手依照在设置文件中呈现的序次使用。每一个划定规矩只要在它的Pattern婚配了一个URL并且一切毗连前提(RewriteCond)都婚配时才会被使用。在该URL用Substitution完成交换以后,重写历程还在持续,一向到设置文件停止大概碰到一个用了任何中断标记的划定规矩。在Substitution中的特别字符串"-"(短横)意味着没有交换,并且当你必要使用该划定规矩并留下的原始的未被介入过的URL时它是很有效的。
别的,这里有一个撑持的flag(标记)列表。这些标识能够改动划定规矩的体现。与Apache完整兼容的标记被标志为绿色,不撑持的标记被标志为绿色,只在ISAPI_Rewrite中被撑持的标识被标志成黄色。
CU(CaseUpper)
把交换字符串改成年夜写.
CL(CaseLower)
把交换字符串改成小写.
chain|C
将以后划定规矩与后一条划定规矩链接起来,后一条划定规矩只要在以后划定规矩被婚配的情形下才干被实行。链接能够再后续链接。
cookie|CO=NAME:VAL:domain[:lifetime[:path]]
设置一个有指定字段的cookies头,并把它和以后哀求的呼应一同发送到客户端。
env|E=VAR:VAL
不撑持,在UNIX情况中设置一个情况变量,在Windows体系中偶然义。
forbidden|F
发送立即403FORBIDDEN呼应到客户端,中断这个哀求的划定规矩处置和一切其他的交换处置。
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_Rewrite2.x兼容。假如利用了RewriteCompatibility2,这个指令在处置之前将URL标准化。标准化包含移除一个URL编码、毛病字符,等等。同时URL的标准化将完整移除它的查询字符串。假如RewriteCompatibility2没有被利用,URL依照默许被标准化(就好像它在mod_rewrite中所做的),此标记的寄义将反转。
proxy|P
将了局URL强迫外部处置为另外一台服务器上的方针,并立即传到远程服务器上,而且,划定规矩处置在这里中止了。远程服务器的呼应将被传送回客户端。proxy必要您指定完全的URL,由协定、主机称号等开首。ISAPI_Rewrite利用ISAPI扩大来处置代办署理哀求。你能够在代办署理设置章节中浏览到更多有关于此的内容。
passthrough|PT
不撑持大概一直撑持。在IIS中了局一直传送到下一个处置
qsappend|QSA安装和登录命令:login、shutdown、halt、reboot、mount、umount、chsh |
|