Apache HTTP Server 版本 2.4
描述 | 允许根据请求的特性设置环境变量 |
---|---|
状态 | 基础 |
模块标识符 | setenvif_module |
源文件 | mod_setenvif.c |
模块允许您根据请求的不同方面是否与您指定的正则表达式匹配来设置内部环境变量。这些环境变量可以被服务器的其他部分用来决定要采取的操作,也可以被 CGI 脚本和 SSI 页面使用。mod_setenvif
这些指令按它们在配置文件中出现的顺序进行考虑。因此,可以使用更复杂的序列,例如以下示例,它在浏览器是 Mozilla 但不是 MSIE 的情况下设置 netscape
。
BrowserMatch ^Mozilla netscape BrowserMatch MSIE !netscape
当服务器通过内部 子请求(例如查找 DirectoryIndex
或使用 mod_autoindex
生成目录列表)查找路径时,每个请求的环境变量不会在子请求中继承。此外,由于 mod_setenvif
所采取的 API 阶段,SetEnvIf
指令不会在子请求中单独评估。
描述 | 根据 HTTP User-Agent 设置环境变量 |
---|---|
语法 | BrowserMatch regex [!]env-variable[=value] [[!]env-variable[=value]] ... |
上下文 | 服务器配置、虚拟主机、目录、.htaccess |
覆盖 | FileInfo |
状态 | 基础 |
模块 | 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
描述 | 根据 User-Agent 设置环境变量,不区分大小写 |
---|---|
语法 | BrowserMatchNoCase regex [!]env-variable[=value] [[!]env-variable[=value]] ... |
上下文 | 服务器配置、虚拟主机、目录、.htaccess |
覆盖 | FileInfo |
状态 | 基础 |
模块 | 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 |
覆盖 | FileInfo |
状态 | 基础 |
模块 | mod_setenvif |
指令根据请求的属性定义环境变量。第一个参数中指定的 attribute 可以是以下四种情况之一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 中在方案和主机部分之后且不包含查询字符串的部分。有关如何匹配查询字符串的更多信息,请参阅 mod_rewrite
的 RewriteCond
指令。SetEnvIf
指令针对先前匹配的结果进行测试。只有由早期的 SetEnvIf[NoCase]
指令定义的环境变量才能以这种方式进行测试。“更早”意味着它们是在更广泛的范围内(例如服务器范围)或在当前指令范围内的先前位置定义的。只有在请求特征中没有匹配且 attribute 未使用正则表达式的情况下,才会考虑环境变量。第二个参数(regex)是一个 正则表达式。如果 regex 与 attribute 匹配,则评估其余参数。
其余参数给出要设置的变量的名称,以及可选地要设置的值。它们采用以下形式
varname
,或!varname
,或varname=value
在第一种形式中,该值将被设置为“1”。第二种形式将在已定义的情况下删除给定的变量,第三种形式将该变量设置为 value
给出的文字值。从版本 2.0.51 开始,Apache httpd 将识别 value 中 $1
..$9
的出现,并用 regex 的带括号的子表达式替换它们。$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
网站上。
最后一个示例将在请求包含任何以“TS”开头的标头且其值以 [a-z] 集合中的任何字符开头的标头时设置环境变量 HAVE_TS
。
描述 | 根据 ap_expr 表达式设置环境变量 |
---|---|
语法 | SetEnvIfExpr expr [!]env-variable[=value] [[!]env-variable[=value]] ... |
上下文 | 服务器配置、虚拟主机、目录、.htaccess |
覆盖 | FileInfo |
状态 | 基础 |
模块 | mod_setenvif |
指令根据 表达式 定义环境变量。这些表达式将在运行时进行评估,并以与 SetEnvIfExpr
相同的方式应用 env-variable,包括反向引用。SetEnvIf
SetEnvIfExpr "tolower(req('X-Sendfile')) == 'd:\images\very_big.iso')" iso_delivered SetEnvIfExpr "tolower(req('X-Sendfile')) =~ /(.*\.iso$)/" iso-path=$1
这将在我们的应用程序尝试通过 X-Sendfile
发送它时设置环境变量 iso_delivered
一个更有用的示例是根据 RFC 1918 设置变量 rfc1918,如果远程 IP 地址是私有地址。
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 |
覆盖 | FileInfo |
状态 | 基础 |
模块 | mod_setenvif |
在语义上与 SetEnvIfNoCase
指令相同,唯一的区别是正则表达式匹配以不区分大小写的方式执行。例如SetEnvIf
SetEnvIfNoCase Host Example\.Org site=example
这将导致如果 HTTP 请求头字段 Host:
包含 Example.Org
、example.org
或任何其他组合,则环境变量 site
将被设置为“example
”。