]> granicus.if.org Git - apache/commitdiff
update transformation
authorAndré Malo <nd@apache.org>
Wed, 2 Apr 2008 15:07:57 +0000 (15:07 +0000)
committerAndré Malo <nd@apache.org>
Wed, 2 Apr 2008 15:07:57 +0000 (15:07 +0000)
git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@643930 13f79535-47bb-0310-9956-ffa450edef68

docs/manual/mod/core.xml.de
docs/manual/mod/core.xml.ja
docs/manual/mod/mod_filter.html.en
docs/manual/mod/quickreference.html.de
docs/manual/mod/quickreference.html.en
docs/manual/mod/quickreference.html.es
docs/manual/mod/quickreference.html.ja.euc-jp
docs/manual/mod/quickreference.html.ko.euc-kr
docs/manual/mod/quickreference.html.tr.utf8
docs/manual/new_features_2_4.html.en

index 8765e2e6106ea083bbe5ee7b57d7063d78f064ac..391fbf323ec91f067085d827be480564e822fa21 100644 (file)
@@ -1,7 +1,7 @@
 <?xml version="1.0"?>
 <!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
 <?xml-stylesheet type="text/xsl" href="../style/manual.de.xsl"?>
-<!-- English Revision: 167959:607437 (outdated) -->
+<!-- English Revision: 167959:641855 (outdated) -->
 
 <!--
  Licensed to the Apache Software Foundation (ASF) under one or more
index d55640a10dfdf94813eb0a2e37b07d58c5390dc6..0cabdc50e8f4ef92245d6913fb4e60faf53829e1 100644 (file)
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="iso-2022-jp"?>
 <!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
 <?xml-stylesheet type="text/xsl" href="../style/manual.ja.xsl"?>
-<!-- English Revision: 190982:607437 (outdated) -->
+<!-- English Revision: 190982:641855 (outdated) -->
 
 <!--
  Licensed to the Apache Software Foundation (ASF) under one or more
index 59dd659e2fdb1da1258822265d21d7119b60ae5d..b202d4271d01c36d8cec1288a65a605fc5f29cc1 100644 (file)
@@ -55,6 +55,7 @@
 <li><img alt="" src="../images/down.gif" /> <a href="#smart">Smart Filtering</a></li>
 <li><img alt="" src="../images/down.gif" /> <a href="#terms">Filter Declarations, Providers and Chains</a></li>
 <li><img alt="" src="../images/down.gif" /> <a href="#config">Configuring the Chain</a></li>
+<li><img alt="" src="../images/down.gif" /> <a href="#upgrade">Upgrading from HTTPD 2.2 Configuration</a></li>
 <li><img alt="" src="../images/down.gif" /> <a href="#examples">Examples</a></li>
 <li><img alt="" src="../images/down.gif" /> <a href="#protocol">Protocol Handling</a></li>
 </ul></div>
     declare it with the default type AP_FTYPE_RESOURCE. The provider
     must have been
     registered with <code>ap_register_output_filter</code> by some module.
-    The remaining arguments to <code class="directive"><a href="#filterprovider">FilterProvider</a></code> are a dispatch criterion and a match string.
-    The former may be an HTTP request or response header, an environment
-    variable, or the Handler used by this request.  The latter is matched
-    to it for each request, to determine whether this provider will be
-    used to implement the filter for this request.</dd>
+    The final argument to <code class="directive"><a href="#filterprovider">FilterProvider</a></code> is an expression: the provider will be
+    selected to run for a request if and only if the expression evaluates
+    to true.  The expression may evaluate HTTP request or response
+    headers, environment variables, or the Handler used by this request.
+    Unlike earlier versions, mod_filter now supports complex expressions
+    involving multiple criteria with AND / OR logic (&amp;&amp; / ||)
+    and brackets.</dd>
 
     <dt>Configure the Chain</dt>
     <dd>The above directives build components of a smart filter chain,
 </dl>
 </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
 <div class="section">
+<h2><a name="upgrade" id="upgrade">Upgrading from HTTPD 2.2 Configuration</a></h2>
+    <p>The <code class="directive"><a href="#filterprovider">FilterProvider</a></code>
+    directive has changed from HTTPD 2.2: the <var>match</var> and
+    <var>dispatch</var> arguments are replaced with a single but
+    more versatile <var>expression</var>.  In general, you can convert
+    a match/dispatch pair to the two sides of an expression, using
+    something like:</p>
+    <div class="example"><p><code>"dispatch = match"</code></p></div>
+    <p>The Request headers, Response headers and Environment variables
+    are now interpreted from syntax <var>$req{foo}</var>,
+    <var>$resp{foo}</var> and <var>$env{foo}</var> respectively.
+    The variables <var>$handler</var> and <var>$Content-Type</var>
+    are also supported.</p>
+    <p>Note that the match no longer supports integer comparisons
+    or substring matches.  The latter can be replaced by regular
+    expression matches.</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">Examples</a></h2>
     <dl>
     <dt>Server side Includes (SSI)</dt>
     <code class="directive"><a href="../mod/core.html#addoutputfilterbytype">AddOutputFilterByType</a></code>
     <div class="example"><p><code>
       FilterDeclare SSI<br />
-      FilterProvider SSI INCLUDES resp=Content-Type $text/html<br />
+      FilterProvider SSI INCLUDES "$resp{Content-Type} = /^text\/html/"<br />
       FilterChain SSI
     </code></p></div>
     </dd>
     <dd>The same as the above but dispatching on handler (classic
     SSI behaviour; .shtml files get processed).
     <div class="example"><p><code>
-      FilterProvider SSI INCLUDES Handler server-parsed<br />
+      FilterProvider SSI INCLUDES "Handler = server-parsed"<br />
       FilterChain SSI
     </code></p></div>
     </dd>
     Accept-Encoding header.  This filter runs with ftype CONTENT_SET.
     <div class="example"><p><code>
       FilterDeclare gzip CONTENT_SET<br />
-      FilterProvider gzip inflate req=Accept-Encoding !$gzip<br />
+      FilterProvider gzip inflate "$req{Accept-Encoding} != /gzip/"<br />
       FilterChain gzip
     </code></p></div>
     </dd>
     <dd>Suppose we want to downsample all web images, and have filters
     for GIF, JPEG and PNG.
     <div class="example"><p><code>
-      FilterProvider unpack jpeg_unpack Content-Type $image/jpeg<br />
-      FilterProvider unpack gif_unpack Content-Type $image/gif<br />
-      FilterProvider unpack png_unpack Content-Type $image/png<br />
+      FilterProvider unpack jpeg_unpack "$resp{Content-Type} = image/jpeg"<br />
+      FilterProvider unpack gif_unpack "$resp{Content-Type} = image/gif"<br />
+      FilterProvider unpack png_unpack "$resp{Content-Type} = image/png"<br />
       <br />
-      FilterProvider downsample downsample_filter Content-Type $image<br />
+      FilterProvider downsample downsample_filter "$resp{Content-Type} = /image\/(jpeg|gif|png)/"<br />
       FilterProtocol downsample "change=yes"<br />
       <br />
-      FilterProvider repack jpeg_pack Content-Type $image/jpeg<br />
-      FilterProvider repack gif_pack Content-Type $image/gif<br />
-      FilterProvider repack png_pack Content-Type $image/png<br />
+      FilterProvider repack jpeg_pack "$resp{Content-Type} = image/jpeg"<br />
+      FilterProvider repack gif_pack "$resp{Content-Type} = image/gif"<br />
+      FilterProvider repack png_pack "$resp{Content-Type} = image/png"<br />
       &lt;Location /image-filter&gt;<br />
       <span class="indent">
         FilterChain unpack downsample repack<br />
 <table class="directive">
 <tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Register a content filter</td></tr>
 <tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>FilterProvider <var>filter-name</var> <var>provider-name</var>
[req|resp|env]=<var>dispatch</var> <var>match</var></code></td></tr>
<var>expression</var></code></td></tr>
 <tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host, directory, .htaccess</td></tr>
 <tr><th><a href="directive-dict.html#Override">Override:</a></th><td>Options</td></tr>
 <tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Base</td></tr>
 <tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_filter</td></tr>
 </table>
     <p>This directive registers a <em>provider</em> for the smart filter.
-    The provider will be called if and only if the <var>match</var> declared
-    here matches the value of the header or environment variable declared
-    as <var>dispatch</var>.</p>
+    The provider will be called if and only if the <var>expression</var>
+    declared evaluates to true when the harness is first called.</p>
 
     <p>
     <var>provider-name</var> must have been registered by loading
     a module that registers the name with
     <code>ap_register_output_filter</code>.
-
     </p>
 
-    <p>The <var>dispatch</var> argument is a string with optional
-    <code>req=</code>, <code>resp=</code> or <code>env=</code> prefix
-    causing it to dispatch on (respectively) the request header, response
-    header, or environment variable named.  In the absence of a
-    prefix, it defaults to a response header.  A special case is the
-    word <code>handler</code>, which causes <code class="module"><a href="../mod/mod_filter.html">mod_filter</a></code>
-    to dispatch on the content handler.</p>
-
-    <p>The <var>match</var> argument specifies a match that will be applied to
-    the filter's <var>dispatch</var> criterion.  The <var>match</var> may be
-    a string match (exact match or substring), a <a class="glossarylink" href="../glossary.html#regex" title="see glossary">regex</a>, an integer (greater, lessthan or equals), or
-    unconditional.  The first characters of the <var>match</var> argument
-    determines this:</p>
-
-    <p><strong>First</strong>, if the first character is an exclamation mark
-    (<code>!</code>), this reverses the rule, so the provider will be used
-    if and only if the match <em>fails</em>.</p>
-
-    <p><strong>Second</strong>, it interprets the first character excluding
-    any leading <code>!</code> as follows:</p>
-
-    <table class="bordered"><tr class="header"><th>Character</th><th>Description</th></tr>
-<tr><td><em>(none)</em></td><td>exact match</td></tr>
-<tr class="odd"><td><code>$</code></td><td>substring match</td></tr>
-<tr><td><code>/</code></td><td>regex match (delimited by a second <code>/</code>)</td></tr>
-<tr class="odd"><td><code>=</code></td><td>integer equality</td></tr>
-<tr><td><code>&lt;</code></td><td>integer less-than</td></tr>
-<tr class="odd"><td><code>&lt;=</code></td><td>integer less-than or equal</td></tr>
-<tr><td><code>&gt;</code></td><td>integer greater-than</td></tr>
-<tr class="odd"><td><code>&gt;=</code></td><td>integer greater-than or equal</td></tr>
-<tr><td><code>*</code></td><td>Unconditional match</td></tr>
-</table>
+    <p><var>expression</var> can be any of the following:</p>
+    <dl>
+      <dt><code><var>string</var></code></dt>
+      <dd>true if <var>string</var> is not empty</dd>
+
+      <dt><code><var>string1</var> = <var>string2</var><br />
+      <var>string1</var> == <var>string2</var><br />
+      <var>string1</var> != <var>string2</var></code></dt>
+
+      <dd><p>Compare <var>string1</var> with <var>string2</var>. If
+      <var>string2</var> has the form <code>/<var>string2</var>/</code>
+      then it is treated as a regular expression. Regular expressions are
+      implemented by the <a href="http://www.pcre.org">PCRE</a> engine and
+      have the same syntax as those in <a href="http://www.perl.com">perl
+      5</a>. Note that <code>==</code> is just an alias for <code>=</code>
+      and behaves exactly the same way.</p>
+      </dd>
+
+      <dt><code><var>string1</var> &lt; <var>string2</var><br />
+       <var>string1</var> &lt;= <var>string2</var><br />
+       <var>string1</var> &gt; <var>string2</var><br />
+       <var>string1</var> &gt;= <var>string2</var></code></dt>
+
+      <dd>Compare <var>string1</var> with <var>string2</var>. Note, that
+      strings are compared <em>literally</em> (using
+      <code>strcmp(3)</code>). Therefore the string "100" is less than
+      "20".</dd>
+
+      <dt><code>( <var>expression</var> )</code></dt>
+      <dd>true if <var>expression</var> is true</dd>
+
+      <dt><code>! <var>expression</var></code></dt>
+      <dd>true if <var>expression</var> is false</dd>
+
+      <dt><code><var>expression1</var> &amp;&amp;
+        <var>expression2</var></code></dt>
+      <dd>true if both <var>expression1</var> and
+      <var>expression2</var> are true</dd>
+
+      <dt><code><var>expression1</var> ||
+        <var>expression2</var></code></dt>
+      <dd>true if either <var>expression1</var> or
+      <var>expression2</var> is true</dd>
+    </dl>
+
 
 </div>
 <div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
index ca4e589f388049379d6d3e08df6ed2ea7633bd00..3abda0865db7c2ea082d8a78697a817780a96d69 100644 (file)
@@ -354,7 +354,7 @@ beziehen</td></tr>
 <tr class="odd"><td><a href="mod_filter.html#filterprotocol">FilterProtocol <var>filter-name</var> [<var>provider-name</var>]
     <var>proto-flags</var></a></td><td></td><td>svdh</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">Deal with correct HTTP protocol handling</td></tr>
 <tr><td><a href="mod_filter.html#filterprovider">FilterProvider <var>filter-name</var> <var>provider-name</var>
[req|resp|env]=<var>dispatch</var> <var>match</var></a></td><td></td><td>svdh</td><td>B</td></tr><tr><td class="descr" colspan="4">Register a content filter</td></tr>
<var>expression</var></a></td><td></td><td>svdh</td><td>B</td></tr><tr><td class="descr" colspan="4">Register a content filter</td></tr>
 <tr class="odd"><td><a href="mod_filter.html#filtertrace">FilterTrace <var>filter-name</var> <var>level</var></a></td><td></td><td>svd</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">Get debug/diagnostic information from
     <code class="module"><a href="../mod/mod_filter.html">mod_filter</a></code></td></tr>
 <tr><td><a href="mod_negotiation.html#forcelanguagepriority">ForceLanguagePriority None|Prefer|Fallback [Prefer|Fallback]</a></td><td> Prefer </td><td>svdh</td><td>B</td></tr><tr><td class="descr" colspan="4">Action to take if a single acceptable document is not 
index e56eb7ed38407b1b253cd84f9da4a36b62677ac4..280a4b48bd8bb8107fe2b0019a83655fa5561459 100644 (file)
@@ -344,7 +344,7 @@ filenames</td></tr>
 <tr><td><a href="mod_filter.html#filterprotocol">FilterProtocol <var>filter-name</var> [<var>provider-name</var>]
     <var>proto-flags</var></a></td><td></td><td>svdh</td><td>B</td></tr><tr><td class="descr" colspan="4">Deal with correct HTTP protocol handling</td></tr>
 <tr class="odd"><td><a href="mod_filter.html#filterprovider">FilterProvider <var>filter-name</var> <var>provider-name</var>
[req|resp|env]=<var>dispatch</var> <var>match</var></a></td><td></td><td>svdh</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">Register a content filter</td></tr>
<var>expression</var></a></td><td></td><td>svdh</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">Register a content filter</td></tr>
 <tr><td><a href="mod_filter.html#filtertrace">FilterTrace <var>filter-name</var> <var>level</var></a></td><td></td><td>svd</td><td>B</td></tr><tr><td class="descr" colspan="4">Get debug/diagnostic information from
     <code class="module"><a href="../mod/mod_filter.html">mod_filter</a></code></td></tr>
 <tr class="odd"><td><a href="mod_negotiation.html#forcelanguagepriority">ForceLanguagePriority None|Prefer|Fallback [Prefer|Fallback]</a></td><td> Prefer </td><td>svdh</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">Action to take if a single acceptable document is not 
index 07b478b0221846d6a0f8e343a7400e1481cf8cf3..6ce46923aa2f1c43361beec1a9357ac38b9aab0c 100644 (file)
@@ -351,7 +351,7 @@ filenames</td></tr>
 <tr><td><a href="mod_filter.html#filterprotocol">FilterProtocol <var>filter-name</var> [<var>provider-name</var>]
     <var>proto-flags</var></a></td><td></td><td>svdh</td><td>B</td></tr><tr><td class="descr" colspan="4">Deal with correct HTTP protocol handling</td></tr>
 <tr class="odd"><td><a href="mod_filter.html#filterprovider">FilterProvider <var>filter-name</var> <var>provider-name</var>
[req|resp|env]=<var>dispatch</var> <var>match</var></a></td><td></td><td>svdh</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">Register a content filter</td></tr>
<var>expression</var></a></td><td></td><td>svdh</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">Register a content filter</td></tr>
 <tr><td><a href="mod_filter.html#filtertrace">FilterTrace <var>filter-name</var> <var>level</var></a></td><td></td><td>svd</td><td>B</td></tr><tr><td class="descr" colspan="4">Get debug/diagnostic information from
     <code class="module"><a href="../mod/mod_filter.html">mod_filter</a></code></td></tr>
 <tr class="odd"><td><a href="mod_negotiation.html#forcelanguagepriority">ForceLanguagePriority None|Prefer|Fallback [Prefer|Fallback]</a></td><td> Prefer </td><td>svdh</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">Action to take if a single acceptable document is not 
index 40078b89c7636238c6ff9f14bb8c79f3778c4cd4..05a369efb7c7b9515cbdfcc1405182c4399ba551 100644 (file)
@@ -331,7 +331,7 @@ API</td></tr>
 <tr><td><a href="mod_filter.html#filterprotocol">FilterProtocol <var>filter-name</var> [<var>provider-name</var>]
     <var>proto-flags</var></a></td><td></td><td>svdh</td><td>B</td></tr><tr><td class="descr" colspan="4">Deal with correct HTTP protocol handling</td></tr>
 <tr class="odd"><td><a href="mod_filter.html#filterprovider">FilterProvider <var>filter-name</var> <var>provider-name</var>
[req|resp|env]=<var>dispatch</var> <var>match</var></a></td><td></td><td>svdh</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">Register a content filter</td></tr>
<var>expression</var></a></td><td></td><td>svdh</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">Register a content filter</td></tr>
 <tr><td><a href="mod_filter.html#filtertrace">FilterTrace <var>filter-name</var> <var>level</var></a></td><td></td><td>svd</td><td>B</td></tr><tr><td class="descr" colspan="4">Get debug/diagnostic information from
     <code class="module"><a href="../mod/mod_filter.html">mod_filter</a></code></td></tr>
 <tr class="odd"><td><a href="mod_negotiation.html#forcelanguagepriority">ForceLanguagePriority None|Prefer|Fallback [Prefer|Fallback]</a></td><td> Prefer </td><td>svdh</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">Í×µá¤Ë¹ç¤¦Ã±ÆȤΥɥ­¥å¥á¥ó¥È¤¬¸«¤Ä¤«¤é¤Ê¤«¤Ã¤¿¤È¤­¤Ë¹Ô¤Ê¤¦¤³¤È¤ò»ØÄê
index 0ebe70947b06f0fb26ade54d41d0ce1a3e5ce1b3..4a18253f63edb9f74db901ec9ae2893a378d829b 100644 (file)
@@ -320,7 +320,7 @@ filenames</td></tr>
 <tr><td><a href="mod_filter.html#filterprotocol">FilterProtocol <var>filter-name</var> [<var>provider-name</var>]
     <var>proto-flags</var></a></td><td></td><td>svdh</td><td>B</td></tr><tr><td class="descr" colspan="4">Deal with correct HTTP protocol handling</td></tr>
 <tr class="odd"><td><a href="mod_filter.html#filterprovider">FilterProvider <var>filter-name</var> <var>provider-name</var>
[req|resp|env]=<var>dispatch</var> <var>match</var></a></td><td></td><td>svdh</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">Register a content filter</td></tr>
<var>expression</var></a></td><td></td><td>svdh</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">Register a content filter</td></tr>
 <tr><td><a href="mod_filter.html#filtertrace">FilterTrace <var>filter-name</var> <var>level</var></a></td><td></td><td>svd</td><td>B</td></tr><tr><td class="descr" colspan="4">Get debug/diagnostic information from
     <code class="module"><a href="../mod/mod_filter.html">mod_filter</a></code></td></tr>
 <tr class="odd"><td><a href="mod_negotiation.html#forcelanguagepriority">ForceLanguagePriority None|Prefer|Fallback [Prefer|Fallback]</a></td><td> Prefer </td><td>svdh</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">Action to take if a single acceptable document is not 
index 7bc41c56804cd75612e151441b6fc8d24da358f0..ed6bdd52f030241eb1be735b5f3a7cfaddd089d0 100644 (file)
@@ -337,7 +337,7 @@ filenames</td></tr>
 <tr><td><a href="mod_filter.html#filterprotocol">FilterProtocol <var>filter-name</var> [<var>provider-name</var>]
     <var>proto-flags</var></a></td><td></td><td>skdh</td><td>T</td></tr><tr><td class="descr" colspan="4">Deal with correct HTTP protocol handling</td></tr>
 <tr class="odd"><td><a href="mod_filter.html#filterprovider">FilterProvider <var>filter-name</var> <var>provider-name</var>
[req|resp|env]=<var>dispatch</var> <var>match</var></a></td><td></td><td>skdh</td><td>T</td></tr><tr class="odd"><td class="descr" colspan="4">Register a content filter</td></tr>
<var>expression</var></a></td><td></td><td>skdh</td><td>T</td></tr><tr class="odd"><td class="descr" colspan="4">Register a content filter</td></tr>
 <tr><td><a href="mod_filter.html#filtertrace">FilterTrace <var>filter-name</var> <var>level</var></a></td><td></td><td>skd</td><td>T</td></tr><tr><td class="descr" colspan="4">Get debug/diagnostic information from
     <code class="module"><a href="../mod/mod_filter.html">mod_filter</a></code></td></tr>
 <tr class="odd"><td><a href="mod_negotiation.html#forcelanguagepriority">ForceLanguagePriority None|Prefer|Fallback [Prefer|Fallback]</a></td><td> Prefer </td><td>skdh</td><td>T</td></tr><tr class="odd"><td class="descr" colspan="4">Action to take if a single acceptable document is not 
index 5814c56d665b084420debe147f0776c91cb8e38c..22453497461422f7d71fed963f81ec2fd3b65a08 100644 (file)
           console.  The user can thus be alerted to misconfiguration problems
           before the core <code>open_logs</code> hook function redirects
           console output to the error log.</dd>
+    <dt>Expression Parser Added</dt>
+    <dd>We now have a general-purpose expression parser, whose API is
+        exposed in <var>ap_expr.h</var>.  This is adapted from the
+        expression parser previously implemented in
+        <code class="module"><a href="./mod/mod_include.html">mod_include</a></code>.</dd>
     </dl>
   </div></div>
 <div class="bottomlang">