mod_setenvif
描述: | 允许根据请求的特征设置环境变量 |
状态: | Base |
模块标识符: | setenvif_module |
源文件: | mod_setenvif.c |
摘要
mod_setenvif模块允许您根据您指定的请求 match 正则表达式的不同方面设置内部环境变量。服务器的其他部分可以使用这些环境变量来决定要采取的操作,以及可用于 CGI 脚本和 SSI 页面。
这些指令在它们出现在 configuration files 中的 order 中被考虑。因此可以使用更复杂的 sequences,例如__ample,如果浏览器是 mozilla 而不是 MSIE,则 sets netscape
。
BrowserMatch ^Mozilla netscape BrowserMatch MSIE !netscape
当服务器通过内部子请求查找路径(例如查找DirectoryIndex或使用mod_autoindex生成目录列表)时,子请求中不会继承 per-request 环境变量。此外,由于 API 阶段mod_setenvif采取行动,子请求中不会单独评估SetEnvIf 之后指令。
BrowserMatch 指令
描述: | Sets 环境变量以 HTTP User-Agent 为条件 |
句法: | BrowserMatch regex[!]env-variable[=value][[!]env-variable[=value]]... |
Context: | server config,virtual host,directory,.htaccess |
覆盖: | FileInfo |
状态: | Base |
模块: | mod_setenvif |
BrowserMatch
是SetEnvIf 之后指令的特殊情况,它根据User-Agent
HTTP 请求标头设置环境变量。以下两个 lines 具有相同的效果:
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 指令
描述: | Sets 环境变量以 User-Agent 为条件而不考虑大小写 |
句法: | BrowserMatchNoCase regex[!]env-variable[=value][[!]env-variable[=value]]... |
Context: | server config,virtual host,directory,.htaccess |
覆盖: | FileInfo |
状态: | Base |
模块: | mod_setenvif |
BrowserMatchNoCase
指令在语义上与BrowserMatch指令相同。但是,它提供了 case-insensitive 匹配。例如:
BrowserMatchNoCase mac platform=macintosh BrowserMatchNoCase win platform=windows
BrowserMatch
和BrowserMatchNoCase
指令是SetEnvIf 之后和SetEnvIfNoCase指令的特例。以下两个 lines 具有相同的效果:
BrowserMatchNoCase Robot is_a_robot SetEnvIfNoCase User-Agent Robot is_a_robot
SetEnvIf 指令
描述: | 根据请求的属性设置环境变量 |
句法: | SetEnvIf attribute regex[!]env-variable[=value][[!]env-variable[=value]]... |
Context: | server config,virtual host,directory,.htaccess |
覆盖: | FileInfo |
状态: | Base |
模块: | mod_setenvif |
SetEnvIf
指令根据请求的属性定义环境变量。第一个参数中指定的属性可以是以下四种之一:
- HTTP 请求标头字段(有关这些字段的详细信息,请参阅RFC2616); for example:
Host
,User-Agent
,Referer
和Accept-Language
。正则表达式可用于指定一组请求 headers。 - 请求的以下方面之一:
Remote_Host
-发出请求的 client 的主机名(如果可用)Remote_Addr
-发出请求的 client 的 IP 地址Server_Addr
-收到请求的服务器的 IP 地址(仅限于 2.0.43 之后的版本)Request_Method
-正在使用的方法的 name(GET
,POST
,等等)Request_Protocol
-用于请求的协议的 name 和 version(e.g.,“HTTP/0.9”,“HTTP/1.1”,etc.)Request_URI
- HTTP 请求 line 上请求的资源-通常是没有查询 string 的 scheme 和 host 部分之后的 URL 部分。有关如何匹配查询 string 的其他信息,请参阅mod_rewrite的RewriteCond指令。- 与请求关联的列表中的环境变量的 name。这允许
SetEnvIf
指令针对先前匹配的结果进行测试。只有早期SetEnvIf[NoCase]
指令定义的环境变量才能以这种方式进行测试。“早期”意味着它们被定义在更广泛的范围(例如 server-wide)或之前在当前指令范围内。仅当请求特征之间没有 match 且未对该属性使用正则表达式时,才会考虑环境变量。
第二个参数(正则表达式)是正则表达式。如果正则表达式与属性匹配,则评估 arguments 的其余部分。
arguments 的 rest 给出要设置的变量的名称,以及应该设置它们的值。这些采取的形式
varname
,或!varname
,或varname=value
在第一种形式中,value 将设置为“1”。第二个将删除给定变量(如果已定义),第三个将变量设置为value
给出的文字 value。自 version 2.0.51 以来,Apache httpd 将识别 value 中$1
..$9
的出现,并用带括号的正则表达式子表达式替换它们。$0
提供对该 pattern 匹配的整个 string 的访问。
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
,如果引用页面位于www.mydomain.example.com
Web 站点上的某个位置,则前四个 sets intra_site_referral
。
如果请求包含任何以“TS”开头的_header,其最后的__ample 将设置环境变量HAVE_TS
,其值以集合[122]中的任何字符开头。
参见
- Apache HTTP Server 中的环境变量,有关其他示例。
SetEnvIfExpr 指令
描述: | Sets 基于 ap_expr 表达式的环境变量 |
句法: | SetEnvIfExpr expr[!]env-variable[=value][[!]env-variable[=value]]... |
Context: | server config,virtual host,directory,.htaccess |
覆盖: | FileInfo |
状态: | Base |
模块: | mod_setenvif |
SetEnvIfExpr
指令基于<If>ap_expr
定义环境变量。这些表达式将在运行时进行评估,并以与SetEnvIf
相同的方式应用 env-variable。
SetEnvIfExpr "tolower(req('X-Sendfile')) == 'd:imagesvery_big.iso')" iso_delivered
这将设置环境变量iso_delivered
每 time 我们的 application 尝试通过X-Sendfile
发送它
根据 RFC 1918,如果 remote IP 地址是私有地址,则更有用的示例是设置变量 rfc1918:
SetEnvIfExpr "-R '10.0.0.0/8' || -R '172.16.0.0/12' || -R '192.168.0.0/16'" rfc1918
参见
- Apache HTTP Server 中的表达式,完整参考和更多示例。
- <If>可用于实现类似的结果。
- mod_filter
SetEnvIfNoCase 指令
描述: | Sets 环境变量基于请求的属性而不考虑大小写 |
句法: | SetEnvIfNoCase attribute regex[!]env-variable[=value][[!]env-variable[=value]]... |
Context: | server config,virtual host,directory,.htaccess |
覆盖: | FileInfo |
状态: | Base |
模块: | mod_setenvif |
SetEnvIfNoCase
在语义上与SetEnvIf 之后指令相同,区别仅在于正则表达式匹配以 case-insensitive 方式执行。例如:
SetEnvIfNoCase Host Example.Org site=example
如果包含 HTTP 请求标头字段Host:
并包含Example.Org
,example.org
或任何其他组合,则会导致site
环境变量设置为“example
”。