• 首页
  • vue
  • TypeScript
  • JavaScript
  • scss
  • css3
  • html5
  • php
  • MySQL
  • redis
  • jQuery
  • 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
    

    BrowserMatchBrowserMatchNoCase指令是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:HostUser-AgentRefererAccept-Language。正则表达式可用于指定一组请求 headers。
    • 请求的以下方面之一:
    • Remote_Host-发出请求的 client 的主机名(如果可用)
    • Remote_Addr-发出请求的 client 的 IP 地址
    • Server_Addr-收到请求的服务器的 IP 地址(仅限于 2.0.43 之后的版本)
    • Request_Method-正在使用的方法的 name(GETPOST,等等)
    • 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.Orgexample.org或任何其他组合,则会导致site环境变量设置为“example”。