]> granicus.if.org Git - apache/blob - docs/manual/env.html.en
update transformation
[apache] / docs / manual / env.html.en
1 <?xml version="1.0" encoding="ISO-8859-1"?>
2 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
3 <html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"><head><!--
4         XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
5               This file is generated from xml source: DO NOT EDIT
6         XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
7       --><title>Environment Variables in Apache - Apache HTTP Server</title><link href="./style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" /><link href="./style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" /><link href="./style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" /><link href="./images/favicon.ico" rel="shortcut icon" /></head><body id="manual-page"><div id="page-header"><p class="menu"><a href="./mod/">Modules</a> | <a href="./mod/directives.html">Directives</a> | <a href="./faq/">FAQ</a> | <a href="./glossary.html">Glossary</a> | <a href="./sitemap.html">Sitemap</a></p><p class="apache">Apache HTTP Server Version 2.0</p><img alt="" src="./images/feather.gif" /></div><div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="./images/left.gif" /></a></div><div id="path"><a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP Server</a> &gt; <a href="http://httpd.apache.org/docs-project/">Documentation</a> &gt; <a href="./">Version 2.0</a></div><div id="page-content"><div id="preamble"><h1>Environment Variables in Apache</h1>
8     <p>The Apache HTTP Server provides a mechanism for storing
9     information in named variables that are called <em>environment
10     variables</em>. This information can be used to control various
11     operations such as logging or access control. The variables are
12     also used as a mechanism to communicate with external programs
13     such as CGI scripts. This document discusses different ways to
14     manipulate and use these variables.</p>
15         
16     <p>Although these variables are referred to as <em>environment
17     variables</em>, they are not the same as the environment
18     variables controlled by the underlying operating system.
19     Instead, these variables are stored and manipulated in an
20     internal Apache structure. They only become actual operating
21     system environment variables when they are provided to CGI
22     scripts and Server Side Include scripts. If you wish to
23     manipulate the operating system environment under which the
24     server itself runs, you must use the standard environment
25     manipulation mechanisms provided by your operating system
26     shell.</p>
27   </div><div id="quickview"><ul id="toc"><li><img alt="" src="./images/down.gif" /> <a href="#setting">Setting Environment Variables</a></li><li><img alt="" src="./images/down.gif" /> <a href="#using">Using Environment Variables</a></li><li><img alt="" src="./images/down.gif" /> <a href="#special">Special Purpose Environment Variables</a></li><li><img alt="" src="./images/down.gif" /> <a href="#examples">Examples</a></li></ul></div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div><div class="section"><h2><a name="setting" id="setting">Setting Environment Variables</a></h2>
28     
29     <table class="related"><tr><th>Related Modules</th><th>Related Directives</th></tr><tr><td><ul><li><code class="module"><a href="./mod/mod_env.html">mod_env</a></code></li><li><code class="module"><a href="./mod/mod_rewrite.html">mod_rewrite</a></code></li><li><code class="module"><a href="./mod/mod_setenvif.html">mod_setenvif</a></code></li><li><code class="module"><a href="./mod/mod_unique_id.html">mod_unique_id</a></code></li></ul></td><td><ul><li><code class="directive"><a href="./mod/mod_setenvif.html#browsermatch">BrowserMatch</a></code></li><li><code class="directive"><a href="./mod/mod_setenvif.html#browsermatchnocase">BrowserMatchNoCase</a></code></li><li><code class="directive"><a href="./mod/mod_env.html#passenv">PassEnv</a></code></li><li><code class="directive"><a href="./mod/mod_rewrite.html#rewriterule">RewriteRule</a></code></li><li><code class="directive"><a href="./mod/mod_env.html#setenv">SetEnv</a></code></li><li><code class="directive"><a href="./mod/mod_setenvif.html#setenvif">SetEnvIf</a></code></li><li><code class="directive"><a href="./mod/mod_setenvif.html#setenvifnocase">SetEnvIfNoCase</a></code></li><li><code class="directive"><a href="./mod/mod_env.html#unsetenv">UnsetEnv</a></code></li></ul></td></tr></table>
30     
31     <h3><a name="basic-manipulation" id="basic-manipulation">Basic Environment Manipulation</a></h3>
32         
33     
34         <p>The most basic way to set an environment variable in Apache
35         is using the unconditional <code class="directive"><a href="./mod/mod_env.html#setenv">SetEnv</a></code> directive. Variables may also be passed from
36         the environment of the shell which started the server using the
37         <code class="directive"><a href="./mod/mod_env.html#passenv">PassEnv</a></code> directive.</p>
38     
39     
40     <h3><a name="conditional" id="conditional">Conditional Per-Request Settings</a></h3>
41         
42     
43         <p>For additional flexibility, the directives provided by
44         mod_setenvif allow environment variables to be set on a
45         per-request basis, conditional on characteristics of particular
46         requests. For example, a variable could be set only when a
47         specific browser (User-Agent) is making a request, or only when
48         a specific Referer [sic] header is found. Even more flexibility
49         is available through the mod_rewrite's <code class="directive"><a href="./mod/mod_rewrite.html#rewriterule">RewriteRule</a></code> which uses the 
50         <code>[E=...]</code> option to set environment variables.</p>
51     
52     
53     <h3><a name="unique-identifiers" id="unique-identifiers">Unique Identifiers</a></h3>
54         
55     
56         <p>Finally, mod_unique_id sets the environment variable
57         <code>UNIQUE_ID</code> for each request to a value which is
58         guaranteed to be unique across "all" requests under very
59         specific conditions.</p>
60     
61     
62     <h3><a name="standard-cgi" id="standard-cgi">Standard CGI Variables</a></h3>
63         
64     
65         <p>In addition to all environment variables set within the
66         Apache configuration and passed from the shell, CGI scripts and
67         SSI pages are provided with a set of environment variables
68         containing meta-information about the request as required by
69         the <a href="http://cgi-spec.golux.com/">CGI
70         specification</a>.</p>
71     
72     
73     <h3><a name="caveats" id="caveats">Some Caveats</a></h3>
74         
75     
76         <ul>
77           <li>It is not possible to override or change the standard CGI
78           variables using the environment manipulation directives.</li>
79     
80           <li>When <a href="suexec.html">suexec</a> is used to launch
81           CGI scripts, the environment will be cleaned down to a set of
82           <em>safe</em> variables before CGI scripts are launched. The
83           list of <em>safe</em> variables is defined at compile-time in
84           <code>suexec.c</code>.</li>
85     
86           <li>For portability reasons, the names of environment
87           variables may contain only letters, numbers, and the
88           underscore character. In addition, the first character may
89           not be a number. Characters which do not match this
90           restriction will be replaced by an underscore when passed to
91           CGI scripts and SSI pages.</li>
92         </ul>
93     
94   </div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div><div class="section"><h2><a name="using" id="using">Using Environment Variables</a></h2>
95     
96     
97     <table class="related"><tr><th>Related Modules</th><th>Related Directives</th></tr><tr><td><ul><li><code class="module"><a href="./mod/mod_authz_host.html">mod_authz_host</a></code></li><li><code class="module"><a href="./mod/mod_cgi.html">mod_cgi</a></code></li><li><code class="module"><a href="./mod/mod_ext_filter.html">mod_ext_filter</a></code></li><li><code class="module"><a href="./mod/mod_headers.html">mod_headers</a></code></li><li><code class="module"><a href="./mod/mod_include.html">mod_include</a></code></li><li><code class="module"><a href="./mod/mod_log_config.html">mod_log_config</a></code></li><li><code class="module"><a href="./mod/mod_rewrite.html">mod_rewrite</a></code></li></ul></td><td><ul><li><code class="directive"><a href="./mod/mod_authz_host.html#allow">Allow</a></code></li><li><code class="directive"><a href="./mod/mod_log_config.html#customlog">CustomLog</a></code></li><li><code class="directive"><a href="./mod/mod_authz_host.html#deny">Deny</a></code></li><li><code class="directive"><a href="./mod/mod_ext_filter.html#extfilterdefine">ExtFilterDefine</a></code></li><li><code class="directive"><a href="./mod/mod_headers.html#header">Header</a></code></li><li><code class="directive"><a href="./mod/mod_log_config.html#logformat">LogFormat</a></code></li><li><code class="directive"><a href="./mod/mod_rewrite.html#rewritecond">RewriteCond</a></code></li><li><code class="directive"><a href="./mod/mod_rewrite.html#rewriterule">RewriteRule</a></code></li></ul></td></tr></table>
98
99     <h3><a name="cgi-scripts" id="cgi-scripts">CGI Scripts</a></h3>
100         
101     
102         <p>One of the primary uses of environment variables is to
103         communicate information to CGI scripts. As discussed above, the
104         environment passed to CGI scripts includes standard
105         meta-information about the request in addition to any variables
106         set within the Apache configuration. For more details, see the
107         <a href="howto/cgi.html">CGI tutorial</a>.</p>
108     
109     
110     <h3><a name="ssi-pages" id="ssi-pages">SSI Pages</a></h3>
111         
112     
113         <p>Server-parsed (SSI) documents processed by mod_include's
114         <code>INCLUDES</code> filter can print environment variables
115         using the <code>echo</code> element, and can use environment
116         variables in flow control elements to makes parts of a page
117         conditional on characteristics of a request. Apache also
118         provides SSI pages with the standard CGI environment variables
119         as discussed above. For more details, see the <a href="howto/ssi.html">SSI tutorial</a>.</p>
120     
121     
122     <h3><a name="access-control" id="access-control">Access Control</a></h3>
123         
124     
125         <p>Access to the server can be controlled based on the value of
126         environment variables using the <code>allow from env=</code>
127         and <code>deny from env=</code> directives. In combination with
128         <code class="directive"><a href="./mod/mod_setenvif.html#setenvif">SetEnvIf</a></code>, this 
129         allows for flexible control of access to the server based on 
130         characteristics of the client. For example, you can use these 
131         directives to deny access to a particular browser (User-Agent).
132         </p>
133     
134     
135     <h3><a name="logging" id="logging">Conditional Logging</a></h3>
136         
137     
138         <p>Environment variables can be logged in the access log using
139         the <code class="directive"><a href="./mod/mod_log_config.html#logformat">LogFormat</a></code>
140         option <code>%e</code>. In addition, the decision on whether
141         or not to log requests can be made based on the status of 
142         environment variables using the conditional form of the 
143         <code class="directive"><a href="./mod/mod_log_config.html#customlog">CustomLog</a></code>
144         directive. In combination with <code class="directive"><a href="./mod/mod_setenvif.html#setenvif">SetEnvIf</a></code> this allows for flexible control of which 
145         requests are logged. For example, you can choose not to log 
146         requests for filenames ending in <code>gif</code>, or you can
147         choose to only log requests from clients which are outside your
148         subnet.</p>
149     
150     
151     <h3><a name="response-headers" id="response-headers">Conditional Response Headers</a></h3>
152         
153     
154         <p>The <code class="directive"><a href="./mod/mod_headers.html#header">Header</a></code>
155         directive can use the presence or
156         absence of an environment variable to determine whether or not
157         a certain HTTP header will be placed in the response to the
158         client. This allows, for example, a certain response header to
159         be sent only if a corresponding header is received in the
160         request from the client.</p>
161     
162     
163
164     <h3><a name="external-filter" id="external-filter">External Filter Activation</a></h3>
165         
166
167         <p>External filters configured by <code class="module"><a href="./mod/mod_ext_filter.html">mod_ext_filter</a></code>
168         using the <code class="directive"><a href="./mod/mod_ext_filter.html#extfilterdefine">ExtFilterDefine</a></code> directive can
169         by activated conditional on an environment variable using the
170         <code>disableenv=</code> and <code>enableenv=</code> options.</p>
171     
172
173     <h3><a name="url-rewriting" id="url-rewriting">URL Rewriting</a></h3>
174         
175     
176         <p>The <code>%{ENV:...}</code> form of <em>TestString</em> in
177         the <code class="directive"><a href="./mod/mod_rewrite.html#rewritecond">RewriteCond</a></code>
178         allows mod_rewrite's rewrite
179         engine to make decisions conditional on environment variables.
180         Note that the variables accessible in mod_rewrite without the
181         <code>ENV:</code> prefix are not actually environment
182         variables. Rather, they are variables special to mod_rewrite
183         which cannot be accessed from other modules.</p>
184     
185   </div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div><div class="section"><h2><a name="special" id="special">Special Purpose Environment Variables</a></h2>
186     
187     
188         <p>Interoperability problems have led to the introduction of
189         mechanisms to modify the way Apache behaves when talking to
190         particular clients. To make these mechanisms as flexible as
191         possible, they are invoked by defining environment variables,
192         typically with <code class="directive"><a href="./mod/mod_setenvif.html#browsermatch">BrowserMatch</a></code>,
193         though <code class="directive"><a href="./mod/mod_env.html#setenv">SetEnv</a></code> and 
194         <code class="directive"><a href="./mod/mod_env.html#passenv">PassEnv</a></code> could also be used,
195         for example.</p>
196     
197     <h3><a name="downgrade" id="downgrade">downgrade-1.0</a></h3>
198         
199     
200         <p>This forces the request to be treated as a HTTP/1.0 request
201         even if it was in a later dialect.</p>
202     
203     
204     <h3><a name="force-no-vary" id="force-no-vary">force-no-vary</a></h3>
205         
206     
207         <p>This causes any <code>Vary</code> fields to be removed from
208         the response header before it is sent back to the client. Some
209         clients don't interpret this field correctly (see the <a href="misc/known_client_problems.html">known client
210         problems</a> page); setting this variable can work around this
211         problem. Setting this variable also implies
212         <strong>force-response-1.0</strong>.</p>
213     
214     
215     <h3><a name="force-response" id="force-response">force-response-1.0</a></h3>
216         
217     
218         <p>This forces an HTTP/1.0 response when set. It was originally
219         implemented as a result of a problem with AOL's proxies. Some
220         clients may not behave correctly when given an HTTP/1.1
221         response, and this can be used to interoperate with them.</p>
222     
223
224     <h3><a name="gzip-only-text-html" id="gzip-only-text-html">gzip-only-text/html</a></h3>
225         
226
227         <p>When set to a value of "1", this variable disables the DEFLATE
228         output filter provided by <code class="module"><a href="./mod/mod_deflate.html">mod_deflate</a></code> for
229         content-types other than <code>text/html</code>.</p>
230     
231
232     <h3><a name="nokeepalive" id="nokeepalive">nokeepalive</a></h3>
233         
234     
235         <p>This disables <code class="directive"><a href="./mod/core.html#keepalive">KeepAlive</a></code> when set.</p>
236     
237     
238     <h3><a name="redirect-carefully" id="redirect-carefully">redirect-carefully</a></h3>
239         
240     
241         <p>This forces the server to be more careful when sending a redirect
242         to the client.  This is typically used when a client has a known
243         problem handling redirects.  This was originally implemented as a
244         result of a problem with Microsoft's WebFolders software which has
245         a problem handling redirects on directory resources via DAV 
246         methods.</p>
247     
248     
249
250    <h3><a name="suppress-error-charset" id="suppress-error-charset">suppress-error-charset</a></h3>
251        
252
253     <p><em>Available in versions after 2.0.40</em></p>
254
255     <p>When Apache issues a redirect in response to a client request,
256     the response includes some actual text to be displayed in case
257     the client can't (or doesn't) automatically follow the redirection.
258     Apache ordinarily labels this text according to the character set
259     which it uses, which is ISO-8859-1.</p>
260     <p> However, if the redirection is to a page that uses a different
261     character set, some broken browser versions will try to use the
262     character set from the redirection text rather than the actual page.
263     This can result in Greek, for instance, being incorrectly rendered.</p>
264     <p>Setting this environment variable causes Apache to omit the character
265     set for the redirection text, and these broken browsers will then correctly
266     use that of the destination page.</p>
267
268    
269
270   </div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div><div class="section"><h2><a name="examples" id="examples">Examples</a></h2>
271     
272     
273     <h3><a name="misbehaving" id="misbehaving">Changing protocol behavior with misbehaving clients</a></h3>
274         
275     
276         <p>We recommend that the following lines be included in
277         httpd.conf to deal with known client problems.</p>
278 <div class="example"><pre>
279 #
280 # The following directives modify normal HTTP response behavior.
281 # The first directive disables keepalive for Netscape 2.x and browsers that
282 # spoof it. There are known problems with these browser implementations.
283 # The second directive is for Microsoft Internet Explorer 4.0b2
284 # which has a broken HTTP/1.1 implementation and does not properly
285 # support keepalive when it is used on 301 or 302 (redirect) responses.
286 #
287 BrowserMatch "Mozilla/2" nokeepalive
288 BrowserMatch "MSIE 4\.0b2;" nokeepalive downgrade-1.0 force-response-1.0
289
290 #
291 # The following directive disables HTTP/1.1 responses to browsers which
292 # are in violation of the HTTP/1.0 spec by not being able to grok a
293 # basic 1.1 response.
294 #
295 BrowserMatch "RealPlayer 4\.0" force-response-1.0
296 BrowserMatch "Java/1\.0" force-response-1.0
297 BrowserMatch "JDK/1\.0" force-response-1.0</pre></div>
298
299     
300     <h3><a name="no-img-log" id="no-img-log">Do not log requests for images in the access log</a></h3>
301         
302     
303         <p>This example keeps requests for images from appearing in the
304         access log. It can be easily modified to prevent logging of
305         particular directories, or to prevent logging of requests
306         coming from particular hosts.</p>
307     <div class="example"><pre>
308 SetEnvIf Request_URI \.gif image-request
309 SetEnvIf Request_URI \.jpg image-request
310 SetEnvIf Request_URI \.png image-request
311 CustomLog logs/access_log common env=!image-request</pre></div>
312     
313     
314     <h3><a name="image-theft" id="image-theft">Prevent "Image Theft"</a></h3>
315         
316     
317         <p>This example shows how to keep people not on your server
318         from using images on your server as inline-images on their
319         pages. This is not a recommended configuration, but it can work
320         in limited circumstances. We assume that all your images are in
321         a directory called /web/images.</p>
322     <div class="example"><pre>
323 SetEnvIf Referer "^http://www.example.com/" local_referal
324 # Allow browsers that do not send Referer info
325 SetEnvIf Referer "^$" local_referal
326 &lt;Directory /web/images&gt;
327    Order Deny,Allow
328    Deny from all
329    Allow from env=local_referal
330 &lt;/Directory&gt;</pre></div>
331     
332         <p>For more information about this technique, see the
333         ApacheToday tutorial " <a href="http://apachetoday.com/news_story.php3?ltsn=2000-06-14-002-01-PS">
334     Keeping Your Images from Adorning Other Sites</a>".</p>
335     
336   </div></div><div id="footer"><p class="apache">Maintained by the <a href="http://httpd.apache.org/docs-project/">Apache HTTP Server Documentation Project</a></p><p class="menu"><a href="./mod/">Modules</a> | <a href="./mod/directives.html">Directives</a> | <a href="./faq/">FAQ</a> | <a href="./glossary.html">Glossary</a> | <a href="./sitemap.html">Sitemap</a></p></div></body></html>