描述: | 允许根据请求的特征设置环境变量 |
---|---|
状态: | 基础 |
模块标识符: | 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-Agent
HTTP请求标头为条件
。以下两行具有相同的效果:
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
或任何其他组合。