| 描述: | 允许根据请求的特征设置环境变量 |
|---|---|
| 状态: | 基础 |
| 模块标识符: | setenvif_module |
| 源文件: | mod_setenvif.c |
该mod_setenvif模块允许您根据请求的不同方面是否匹配您指定的正则表达式来设置内部环境变量。服务器的其他部分可以使用这些环境变量来决定要采取的操作,以及可以用于CGI脚本和SSI页面。
指令按照它们在配置文件中出现的顺序进行考虑。因此,可以使用更复杂的序列,例如本示例,该序列设置netscape浏览器是否为mozilla而非MSIE。
BrowserMatch ^Mozilla netscape BrowserMatch MSIE !netscape
当服务器通过内部子请求(例如查找DirectoryIndex
或使用生成目录列表)查找路径时,
子mod_autoindex请求中不会继承每个请求的环境变量。此外,SetEnvIf由于API阶段mod_setenvif会采取行动,
因此不会在子请求中单独评估指令
。
| 描述: | 设置以HTTP User-Agent为条件的环境变量 |
|---|---|
| 句法: | BrowserMatch regex [!]env-variable[=value]
[[!]env-variable[=value]] ... |
| 内容: | 服务器配置,虚拟主机,目录,.htaccess |
| 覆写: | 文件信息 |
| 状态: | 基础 |
| 模块: | mod_setenvif |
这BrowserMatch是SetEnvIf伪指令的特殊情况,该
伪指令将环境变量设置为以User-AgentHTTP请求标头为条件
。以下两行具有相同的效果:
BrowserMatch Robot is_a_robot SetEnvIf User-Agent Robot is_a_robot
一些其他示例:
BrowserMatch ^Mozilla forms jpeg=yes browser=netscape BrowserMatch "^Mozilla/[2-3]" tables agif frames javascript BrowserMatch MSIE !javascript
| 描述: | 设置环境变量以用户代理为条件,不考虑大小写 |
|---|---|
| 句法: | BrowserMatchNoCase regex [!]env-variable[=value]
[[!]env-variable[=value]] ... |
| 内容: | 服务器配置,虚拟主机,目录,.htaccess |
| 覆写: | 文件信息 |
| 状态: | 基础 |
| 模块: | mod_setenvif |
该BrowserMatchNoCase指令在语义上与该BrowserMatch指令相同。但是,它提供不区分大小写的匹配。例如:
BrowserMatchNoCase mac platform=macintosh BrowserMatchNoCase win platform=windows
在BrowserMatch和
BrowserMatchNoCase指令是特殊情况SetEnvIf和SetEnvIfNoCase
指令。以下两行具有相同的效果:
BrowserMatchNoCase Robot is_a_robot SetEnvIfNoCase User-Agent Robot is_a_robot
| 描述: | 根据请求的属性设置环境变量 |
|---|---|
| 句法: | SetEnvIf attribute
regex [!]env-variable[=value]
[[!]env-variable[=value]] ... |
| 内容: | 服务器配置,虚拟主机,目录,.htaccess |
| 覆写: | 文件信息 |
| 状态: | 基础 |
| 模块: | mod_setenvif |
该SetEnvIf指令根据请求的属性定义环境变量。在第一个参数中指定的
属性可以是以下四种之一:
Host,
User-Agent,Referer,和
Accept-Language。正则表达式可用于指定一组请求标头。Remote_Host -发出请求的客户端的主机名(如果有)Remote_Addr -发出请求的客户端的IP地址Server_Addr -在其上接收到请求的服务器的IP地址(仅适用于2.0.43之后的版本)Request_Method-所使用的方法的名称(GET,POST,等等)Request_Protocol-发出请求的协议的名称和版本(例如 “ HTTP / 0.9”,“ HTTP / 1.1” 等)Request_URI-HTTP请求行上请求的资源-通常是方案后面的URL部分和主机部分,没有查询字符串。有关如何匹配查询字符串的更多信息,请参见的RewriteCond
指令mod_rewrite。SetEnvIf指令针对先前匹配的结果进行测试。只有较早的SetEnvIf[NoCase]指令定义的那些环境变量
才能以这种方式进行测试。“更早”是指它们是在更广泛的范围内定义的(例如在服务器范围内),或者在当前指令的范围内进行了定义。仅当请求特征之间不匹配并且该属性未使用正则表达式时,才考虑环境变量。第二个参数(regex)是一个正则表达式。如果正则表达式 与attribute相匹配,则将评估其余参数。
其余参数提供要设置的变量的名称,以及可以选择设置的值。这些采取的形式
varname, 要么!varname, 要么varname=value在第一种形式中,该值将设置为“ 1”。第二个将删除给定的变量(如果已定义),第三个将将该变量设置为由给出的文字值
value。从2.0.51版本开始,Apache httpd将识别出现在
值中的$1.. 并将其替换为regex的带括号的子表达式。提供对该模式匹配的整个字符串的访问。$9$0
SetEnvIf Request_URI "\.gif$" object_is_image=gif
SetEnvIf Request_URI "\.jpg$" object_is_image=jpg
SetEnvIf Request_URI "\.xbm$" object_is_image=xbm
SetEnvIf Referer www\.mydomain\.example\.com intra_site_referral
SetEnvIf object_is_image xbm XBIT_PROCESSING=1
SetEnvIf Request_URI "\.(.*)$" EXTENSION=$1
SetEnvIf ^TS ^[a-z] HAVE_TS
object_is_image如果请求是用于图像文件,则前三个将设置环境变量,intra_site_referral如果引用页面位于www.mydomain.example.com网站上的某个位置,则
前四个将设置环境变量
。
HAVE_TS如果请求包含以“ TS”开头的任何标头,且其值以集合[az]中的任何字符开头,则最后一个示例将设置环境变量
。
| 描述: | 根据ap_expr表达式设置环境变量 |
|---|---|
| 句法: | SetEnvIfExpr expr
[!]env-variable[=value]
[[!]env-variable[=value]] ... |
| 内容: | 服务器配置,虚拟主机,目录,.htaccess |
| 覆写: | 文件信息 |
| 状态: | 基础 |
| 模块: | mod_setenvif |
该SetEnvIfExpr指令定义的环境变量基础上的<If>
ap_expr。这些表达式将在运行时进行评估,并以与相同的方式应用env-variableSetEnvIf。
SetEnvIfExpr "tolower(req('X-Sendfile')) == 'd:\images\very_big.iso')" iso_delivered
iso_delivered
每次我们的应用程序尝试通过发送环境变量时,都会设置环境变量X-Sendfile
一个更有用的示例是,如果远程IP地址是根据RFC 1918的私有地址,则设置变量rfc1918:
SetEnvIfExpr "-R '10.0.0.0/8' || -R '172.16.0.0/12' || -R '192.168.0.0/16'" rfc1918
<If> 可以用来达到类似的效果。mod_filter| 描述: | 根据请求的属性设置环境变量,而不考虑大小写 |
|---|---|
| 句法: | SetEnvIfNoCase attribute regex
[!]env-variable[=value]
[[!]env-variable[=value]] ... |
| 内容: | 服务器配置,虚拟主机,目录,.htaccess |
| 覆写: | 文件信息 |
| 状态: | 基础 |
| 模块: | mod_setenvif |
在SetEnvIfNoCase语义上与SetEnvIf指令相同,不同之处仅在于,正则表达式匹配以不区分大小写的方式执行。例如:
SetEnvIfNoCase Host Example\.Org site=example
这将导致site环境变量被设置为“ example如果HTTP请求报头字段” Host:被列入并且包含
Example.Org,example.org或任何其他组合。