<?xml version="1.0"?>
<!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
<?xml-stylesheet type="text/xsl" href="../style/manual.en.xsl"?>
<!-- $LastChangedRevision$ -->

<!--
 Licensed to the Apache Software Foundation (ASF) under one or more
 contributor license agreements.  See the NOTICE file distributed with
 this work for additional information regarding copyright ownership.
 The ASF licenses this file to You under the Apache License, Version 2.0
 (the "License"); you may not use this file except in compliance with
 the License.  You may obtain a copy of the License at

     http://www.apache.org/licenses/LICENSE-2.0

 Unless required by applicable law or agreed to in writing, software
 distributed under the License is distributed on an "AS IS" BASIS,
 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 See the License for the specific language governing permissions and
 limitations under the License.
-->

<modulesynopsis metafile="mod_setenvif.xml.meta">

<name>mod_setenvif</name>
<description>Allows the setting of environment variables based
on characteristics of the request</description>
<status>Base</status>
<sourcefile>mod_setenvif.c</sourcefile>
<identifier>setenvif_module</identifier>


<summary>

    <p>The <module>mod_setenvif</module> module allows you to set
    internal environment variables according to whether different aspects of
    the request match regular expressions you specify. These
    environment variables can be used by other parts of the server
    to make decisions about actions to be taken, as well as becoming
    available to CGI scripts and SSI pages.</p>

    <p>The directives are considered in the order they appear in
    the configuration files. So more complex sequences can be used,
    such as this example, which sets <code>netscape</code> if the
    browser is mozilla but not MSIE.</p>

<highlight language="config">
BrowserMatch ^Mozilla netscape
BrowserMatch MSIE !netscape
</highlight>

   <p>When the server looks up a path via an internal
   <glossary ref="subrequest">subrequest</glossary> such as looking
   for a <directive module="mod_dir" >DirectoryIndex</directive>
   or generating a directory listing with <module>mod_autoindex</module>,
   per-request environment variables are <em>not</em> inherited in the
   subrequest. Additionally,
   <directive module="mod_setenvif">SetEnvIf</directive> directives
   are not separately evaluated in the subrequest due to the API phases
   <module>mod_setenvif</module> takes action in.</p>

   <p>A regular expression only needs quoting when it contains space, 
   in which case single and double quotes are equivalent. Unlike 
   <module>mod_rewrite</module>, <module>mod_setenvif</module> strips every 
   other backslash when parsing the expression; thus <code>\\</code> 
   requires <code>\\\</code>, and <code>\\\</code> requires 
   <code>\\\\\</code>.</p>

</summary>

<seealso><a href="../env.html">Environment Variables in Apache HTTP Server</a></seealso>

<directivesynopsis>
<name>BrowserMatch</name>
<description>Sets environment variables conditional on HTTP User-Agent
</description>
<syntax>BrowserMatch <em>regex [!]env-variable</em>[=<em>value</em>]
[[!]<em>env-variable</em>[=<em>value</em>]] ...</syntax>
<contextlist><context>server config</context>
<context>virtual host</context><context>directory</context>
<context>.htaccess</context></contextlist>
<override>FileInfo</override>

<usage>
  <p>The <directive>BrowserMatch</directive> is a special cases of the
  <directive module="mod_setenvif">SetEnvIf</directive> directive that
  sets environment variables conditional on the
  <code>User-Agent</code> HTTP request header.  The following two
  lines have the same effect:</p>
<highlight language="config">
BrowserMatch Robot is_a_robot
SetEnvIf User-Agent Robot is_a_robot
</highlight>

    <p>Some additional examples:</p>
<highlight language="config">
BrowserMatch ^Mozilla forms jpeg=yes browser=netscape
BrowserMatch "^Mozilla/[2-3]" tables agif frames javascript
BrowserMatch MSIE !javascript
</highlight>
</usage>
</directivesynopsis>

<directivesynopsis>
<name>BrowserMatchNoCase</name>
<description>Sets environment variables conditional on User-Agent without
respect to case</description>
<syntax>BrowserMatchNoCase  <em>regex [!]env-variable</em>[=<em>value</em>]
    [[!]<em>env-variable</em>[=<em>value</em>]] ...</syntax>
<contextlist><context>server config</context>
<context>virtual host</context><context>directory</context>
<context>.htaccess</context></contextlist>
<override>FileInfo</override>

<usage>

    <p>The <directive>BrowserMatchNoCase</directive> directive is
    semantically identical to the <directive
    module="mod_setenvif">BrowserMatch</directive> directive.
    However, it provides for case-insensitive matching. For
    example:</p>
<highlight language="config">
BrowserMatchNoCase mac platform=macintosh
BrowserMatchNoCase win platform=windows
</highlight>

    <p>The <directive>BrowserMatch</directive> and
    <directive>BrowserMatchNoCase</directive> directives are special cases of
    the <directive module="mod_setenvif">SetEnvIf</directive> and <directive
    module="mod_setenvif">SetEnvIfNoCase</directive>
    directives. The following two lines have the same effect:</p>
<highlight language="config">
BrowserMatchNoCase Robot is_a_robot
SetEnvIfNoCase User-Agent Robot is_a_robot
</highlight>
</usage>
</directivesynopsis>

<directivesynopsis>
<name>SetEnvIf</name>
<description>Sets environment variables based on attributes of the request
</description>
<syntax>SetEnvIf <em>attribute
    regex [!]env-variable</em>[=<em>value</em>]
    [[!]<em>env-variable</em>[=<em>value</em>]] ...</syntax>
<contextlist><context>server config</context>
<context>virtual host</context><context>directory</context>
<context>.htaccess</context></contextlist>
<override>FileInfo</override>

<usage>
    <p>The <directive>SetEnvIf</directive> directive defines
    environment variables based on attributes of the request. The
    <em>attribute</em> specified in the first argument can be one of the
    following things:</p>

<ol>
<li>An HTTP request header field (see <a
    href="http://www.rfc-editor.org/rfc/rfc2616.txt">RFC2616</a>
    for more information about these); for example: <code>Host</code>,
    <code>User-Agent</code>, <code>Referer</code>, and
    <code>Accept-Language</code>.  A regular expression may be
    used to specify a set of request headers.</li>

<li>One of the following aspects of the request:
    <ul>
      <li><code>Remote_Host</code> - the hostname (if available) of
      the client making the request</li>

      <li><code>Remote_Addr</code> - the IP address of the client
      making the request</li>

      <li><code>Server_Addr</code> - the IP address of the server
      on which the request was received (only with versions later
      than 2.0.43)</li>

      <li><code>Request_Method</code> - the name of the method
      being used (<code>GET</code>, <code>POST</code>, <em>et
      cetera</em>)</li>

      <li><code>Request_Protocol</code> - the name and version of
      the protocol with which the request was made (<em>e.g.</em>,
      "HTTP/0.9", "HTTP/1.1", <em>etc.</em>)</li>

      <li><code>Request_URI</code> - the resource requested on the HTTP
       request line -- generally the portion of the URL
      following the scheme and host portion without the query string. See
      the <directive module="mod_rewrite">RewriteCond</directive>
      directive of <module>mod_rewrite</module> for extra information on
      how to match your query string.</li>
    </ul>
</li>

<li>The name of an environment variable in the list of those
associated with the request. This allows
<directive>SetEnvIf</directive> directives to test against the result
of prior matches. Only those environment variables defined by earlier
<code>SetEnvIf[NoCase]</code> directives are available for testing in
this manner. 'Earlier' means that they were defined at a broader scope
(such as server-wide) or previously in the current directive's scope.
Environment variables will be considered only if there was no match
among request characteristics and a regular expression was not
used for the <em>attribute</em>.</li>

</ol>

<p>The second argument (<em>regex</em>) is a <glossary
ref="regex">regular expression</glossary>.  If the <em>regex</em>
matches against the <em>attribute</em>, then the remainder of the
arguments are evaluated.</p>

<p>The rest of the arguments give the names of variables to set, and
optionally values to which they should be set. These take the form
of</p>

    <ol>
      <li><code><em>varname</em></code>, or</li>

      <li><code>!<em>varname</em></code>, or</li>

      <li><code><em>varname</em>=<em>value</em></code></li>
    </ol>

    <p>In the first form, the value will be set to "1". The second
    will remove the given variable if already defined, and the
    third will set the variable to the literal value given by
    <code><em>value</em></code>. Since version 2.0.51, Apache httpd will
    recognize occurrences of <code>$1</code>..<code>$9</code> within
    <var>value</var> and replace them by parenthesized subexpressions
    of <var>regex</var>. <code>$0</code> provides access to the whole
    string matched by that pattern.</p>

    <p>If the special value <code>--early</code> is specified, and this
    directive is not in directory context, the directive will be evaluated
    earlier during request processing.  This allows the output variables
    set by this directive to be used as input to the "early mode" option of
    the <directive module="mod_headers">RequestHeader</directive> directive.
    Available in 2.5.1 and later.</p>

<highlight language="config">
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
</highlight>

    <p>The first three will set the environment variable
    <code>object_is_image</code> if the request was for an image
    file, and the fourth sets <code>intra_site_referral</code> if
    the referring page was somewhere on the
    <code>www.mydomain.example.com</code> Web site.</p>

    <p>The last example will set environment variable
    <code>HAVE_TS</code> if the request contains any headers that
    begin with "TS" whose values begins with any character in the
    set [a-z].</p>
</usage>

<seealso><a href="../env.html">Environment Variables in Apache HTTP Server</a>,
for additional examples.
</seealso>
</directivesynopsis>


<directivesynopsis>

<name>SetEnvIfExpr</name>
<description>Sets environment variables based on an ap_expr expression</description>
<syntax>SetEnvIfExpr <em>expr
    [!]env-variable</em>[=<em>value</em>]
    [[!]<em>env-variable</em>[=<em>value</em>]] ...</syntax>
<contextlist><context>server config</context>
<context>virtual host</context><context>directory</context>
<context>.htaccess</context></contextlist>
<override>FileInfo</override>

<usage>
    <p>The <directive>SetEnvIfExpr</directive> directive defines
    environment variables based on an <a href="../expr.html">expression</a>.
    These expressions will be evaluated at runtime,
    and applied <em>env-variable</em> in the same fashion as <directive
    >SetEnvIf</directive>, including backreferences.</p>

<highlight language="config">
    SetEnvIfExpr "tolower(req('X-Sendfile')) == 'd:\images\very_big.iso')" iso_delivered
    SetEnvIfExpr "tolower(req('X-Sendfile')) =~ /(.*\.iso$)/" iso-path=$1
</highlight>

    <p>This would set the environment variable <code>iso_delivered</code>
    every time our application attempts to send it via <code>X-Sendfile</code></p>

    <p>A more useful example would be to set the variable rfc1918 if the
    remote IP address is a private address according to RFC 1918:</p>

<highlight language="config">
    SetEnvIfExpr "-R '10.0.0.0/8' || -R '172.16.0.0/12' || -R '192.168.0.0/16'" rfc1918
</highlight>
</usage>

<seealso><a href="../expr.html">Expressions in Apache HTTP Server</a>,
for a complete reference and more examples.</seealso>
<seealso><directive module="core" type="section">If</directive> can be used to achieve similar
results.</seealso>
<seealso><module>mod_filter</module></seealso>
</directivesynopsis>

<directivesynopsis>
<name>SetEnvIfNoCase</name>
<description>Sets environment variables based on attributes of the request
without respect to case</description>
<syntax>SetEnvIfNoCase <em>attribute regex
        [!]env-variable</em>[=<em>value</em>]
    [[!]<em>env-variable</em>[=<em>value</em>]] ...</syntax>
<contextlist><context>server config</context>
<context>virtual host</context><context>directory</context>
<context>.htaccess</context></contextlist>
<override>FileInfo</override>

<usage>

    <p>The <directive>SetEnvIfNoCase</directive> is semantically identical to
    the <directive module="mod_setenvif">SetEnvIf</directive> directive,
    and differs only in that the regular expression matching is
    performed in a case-insensitive manner. For example:</p>
<highlight language="config">
   SetEnvIfNoCase Host Example\.Org site=example
</highlight>

    <p>This will cause the <code>site</code> environment variable
    to be set to "<code>example</code>" if the HTTP request header
    field <code>Host:</code> was included and contained
    <code>Example.Org</code>, <code>example.org</code>, or any other
    combination.</p>
</usage>
</directivesynopsis>
</modulesynopsis>
