📄 env.html
字号:
<p><code class="directive"><a href="./mod/mod_rewrite.html#rewritecond">RewriteCond</a></code>中形如 <code>%{ENV:...}</code> 的<em>TestString</em>允许mod_rewrite的重写引擎以环境变量为条件进行决策。注意:mod_rewrite内部可以访问但没有以 <code>ENV:</code> 开头的那些变量并不是真正的环境变量。它们只是mod_rewrite特有的变量而不能被其他模块所访问。</p>
</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">用于特殊目的的环境变量</a></h2>
<p>由于互操作性的问题,在针对特定客户端的处理中,引入了一套修正Apache行为的机制。为了使这些机制尽量灵活,它们将通过环境变量的定义而激活。比如,典型的示例有<code class="directive"><a href="./mod/mod_setenvif.html#browsermatch">BrowserMatch</a></code> ,尽管<code class="directive"><a href="./mod/mod_env.html#setenv">SetEnv</a></code>和<code class="directive"><a href="./mod/mod_env.html#passenv">PassEnv</a></code>也能使用。</p>
<h3><a name="downgrade" id="downgrade">downgrade-1.0</a></h3>
<p>即使这个请求符合更新的标准,也强制把它当作一个HTTP/1.0请求来处理。</p>
<h3><a name="force-gzip" id="force-gzip">force-gzip</a></h3>
<p>如果你激活了<code>DEFLATE</code>过滤器,这个环境变量将忽略浏览器的accept-encoding设置而无条件的使用经过gzip压缩的输出。</p>
<h3><a name="force-no-vary" id="force-no-vary">force-no-vary</a></h3>
<p>此变量在将应答送回客户端之前删除所有的<code>Vary</code>头字段。一些客户端不能正确地解析此头字段。此变量的设定将解决此问题,它同时隐含设置了<strong>force-response-1.0</strong>。</p>
<h3><a name="force-response" id="force-response">force-response-1.0</a></h3>
<p>设定该变量可以在客户端发送HTTP/1.0请求时,强制进行HTTP/1.0响应。它的实现源于一个AOL的代理产生的问题。一些HTTP/1.0客户端在收到HTTP/1.1的响应后会有不正常的举动。而设定此变量能够解决这一问题。</p>
<h3><a name="gzip-only-text-html" id="gzip-only-text-html">gzip-only-text/html</a></h3>
<p>当该变量为"1"时,将禁止<code>text/html</code>之外的内容类型使用由<code class="module"><a href="./mod/mod_deflate.html">mod_deflate</a></code>提供的<code>DEFLATE</code>输出过滤器。如果你更喜欢使用静态的压缩文件;<code class="module"><a href="./mod/mod_negotiation.html">mod_negotiation</a></code>也同样使用该变量(不单单是gzip,而是所有不具有"同一性"的编码)。</p>
<h3><a name="no-gzip" id="no-gzip">no-gzip</a></h3>
<p>如果设置了此变量,<code class="module"><a href="./mod/mod_deflate.html">mod_deflate</a></code>中的<code>DEFLATE</code>过滤器将被禁用,同时<code class="module"><a href="./mod/mod_negotiation.html">mod_negotiation</a></code>将拒绝发送经过编码的资源。</p>
<h3><a name="nokeepalive" id="nokeepalive">nokeepalive</a></h3>
<p>如果设置了此变量,<code class="directive"><a href="./mod/core.html#keepalive">KeepAlive</a></code>将被禁用。</p>
<h3><a name="prefer-language" id="prefer-language">prefer-language</a></h3>
<p>此变量将影响<code class="module"><a href="./mod/mod_negotiation.html">mod_negotiation</a></code>的行为。如果它包含一个语言标签(如:<code>en</code>、<code>fr</code>、<code>zh_cn</code>、<code>x-方言</code>),<code class="module"><a href="./mod/mod_negotiation.html">mod_negotiation</a></code>将尝试发送一个标签指定的语言的变种,如果不存在这样的变种,则使用通常的<a href="content-negotiation.html">内容协商</a>处理过程。</p>
<h3><a name="redirect-carefully" id="redirect-carefully">redirect-carefully</a></h3>
<p>此变量将使服务器在对客户端发送重定向命令时更加小心。典型应用于已知客户端在处理重定向指令时会存在问题的情况下。它的实现源于微软的WebFolders软件存在的一个问题。它在经由DAV方法在目录资源上处理重定向命令时会有问题。</p>
<h3><a name="suppress-error-charset" id="suppress-error-charset">suppress-error-charset</a></h3>
<p><em>仅存在于2.0.54后的版本中</em></p>
<p>当Apache针对用户请求响应一个重定向命令的时候,这个响应中包含了一些文字。这些文字将在客户端不能(或没有)自动执行重定向操作的情况下显示。Apache会将这段文字按照ISO-8859-1字符集进行编码。</p>
<p>然而,如果重定向的目的页面使用了不同的字符集,一些有问题的浏览器版本会使用重定向命令文本的字符集,而不是采用目的页面的字符集。比如,希腊文就不会被正确显示。</p>
<p>设置此环境变量将使Apache略过重定向命令文本的字符集设置,这样这些有问题的浏览器就会正确的使用目的页的字符集。</p>
<h3><a name="proxy" id="proxy">force-proxy-request-1.0, proxy-nokeepalive, proxy-sendchunked, proxy-sendcl</a></h3>
<p>这些指令改变了<code class="module"><a href="./mod/mod_proxy.html">mod_proxy</a></code>协议的行为,参见<code class="module"><a href="./mod/mod_proxy.html">mod_proxy</a></code>文档以获得更多细节。</p>
</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">示例</a></h2>
<h3><a name="misbehaving" id="misbehaving">针对表现不恰当的客户端改变协议的行为</a></h3>
<p>早期的版本建议将以下示例包含到httpd.conf中以解决一些已知的客户端问题。但是这些存在问题的客户端现在基本上已经绝种了,所以,下列示例也就没有存在的必要了。</p>
<div class="example"><pre>
# 下面的指令将会修改HTTP的普通响应方式。
# 第一个指令为Netscape 2.x浏览器禁用keepalive特性,因为它不能正确处理。
# 第二个指令用于IE4.0,因为它也不能对HTTP/1.1的301/302(重定向)应答正确处理keepalive。
BrowserMatch "Mozilla/2" nokeepalive
BrowserMatch "MSIE 4\.0b2;" nokeepalive downgrade-1.0 force-response-1.0
# 下面的指令为违反HTTP/1.0规范的浏览器禁用HTTP/1.1应答。
BrowserMatch "RealPlayer 4\.0" force-response-1.0
BrowserMatch "Java/1\.0" force-response-1.0
BrowserMatch "JDK/1\.0" force-response-1.0</pre></div>
<h3><a name="no-img-log" id="no-img-log">不在访问日志中记录对图片的请求</a></h3>
<p>以下示例将避免将对图片的请求记入访问日志中。你修改一下就可以将它用于避免特定目录或特定主机的请求被记入日志。</p>
<div class="example"><pre>
SetEnvIf Request_URI \.gif image-request
SetEnvIf Request_URI \.jpg image-request
SetEnvIf Request_URI \.png image-request
CustomLog logs/access_log common env=!image-request</pre></div>
<h3><a name="image-theft" id="image-theft">阻止"图片大盗"</a></h3>
<p>下例展示了如何避免不在你服务器上的人在他们的站点中直接引用你服务器上的图片。这不是一个推荐的配置,但它能在有限的环境中加以应用。我们假设你所有的图片都在/web/images目录下。</p>
<div class="example"><pre>
SetEnvIf Referer "^http://www.example.com/" local_referal
# 允许未发送Referer头的浏览器
SetEnvIf Referer "^$" local_referal
<Directory /web/images>
Order Deny,Allow
Deny from all
Allow from env=local_referal
</Directory></pre></div>
<p>想得知此技术的更多信息,请参阅"今日Apache教程" <a href="http://apachetoday.com/news_story.php3?ltsn=2000-06-14-002-01-PS">《保护你的图片不为他人所用》</a>。</p>
</div></div>
<div id="footer">
<p class="apache">本文允许自由使用、分发、转载,但必须保留译者署名;详见:<a href="./translator_announcement.html#announcement">译者声明</a>。</p>
<p class="menu"><a href="./mod/index.html">模块索引</a> | <a href="./mod/directives.html">指令索引</a> | <a href="./faq/index.html">常见问题</a> | <a href="./glossary.html">词汇表</a> | <a href="./sitemap.html">站点导航</a></p></div>
</body></html>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -