rebuilt .html docs for privoxy version 3.0.26
[privoxy.git] / doc / webserver / user-manual / actions-file.html
index 5a3ac07..f78109e 100644 (file)
@@ -6,7 +6,7 @@
   <title>Actions Files</title>
   <meta name="GENERATOR" content=
   "Modular DocBook HTML Stylesheet Version 1.79">
-  <link rel="HOME" title="Privoxy 3.0.20 User Manual" href="index.html">
+  <link rel="HOME" title="Privoxy 3.0.26 User Manual" href="index.html">
   <link rel="PREVIOUS" title="The Main Configuration File" href=
   "config.html">
   <link rel="NEXT" title="Filter Files" href="filter-file.html">
@@ -21,7 +21,7 @@
     <table summary="Header navigation table" width="100%" border="0"
     cellpadding="0" cellspacing="0">
       <tr>
-        <th colspan="3" align="center">Privoxy 3.0.20 User Manual</th>
+        <th colspan="3" align="center">Privoxy 3.0.26 User Manual</th>
       </tr>
 
       <tr>
         in <tt class="FILENAME">default.action</tt> are:</p>
 
         <div class="TABLE">
-          <a name="AEN2774" id="AEN2774"></a>
+          <a name="AEN2793" id="AEN2793"></a>
 
           <p><b>Table 1. Default Configurations</b></p>
 
     actions</a>.</p>
 
     <div class="SECT2">
-      <h2 class="SECT2"><a name="AEN2873" id="AEN2873">8.1. Finding the Right
-      Mix</a></h2>
+      <h2 class="SECT2"><a name="RIGHT-MIX" id="RIGHT-MIX">8.1. Finding the
+      Right Mix</a></h2>
 
       <p>Note that some <a href="actions-file.html#ACTIONS">actions</a>, like
       cookie suppression or script disabling, may render some sites unusable
     </div>
 
     <div class="SECT2">
-      <h2 class="SECT2"><a name="AEN2880" id="AEN2880">8.2. How to
+      <h2 class="SECT2"><a name="HOW-TO-EDIT" id="HOW-TO-EDIT">8.2. How to
       Edit</a></h2>
 
       <p>The easiest way to edit the actions files is with a browser by using
       and potentially match against many similar patterns.</p>
 
       <p>Generally, an URL pattern has the form <tt class=
-      "LITERAL">&lt;domain&gt;&lt;port&gt;/&lt;path&gt;</tt>, where the
-      <tt class="LITERAL">&lt;domain&gt;</tt>, the <tt class=
+      "LITERAL">&lt;host&gt;&lt;port&gt;/&lt;path&gt;</tt>, where the
+      <tt class="LITERAL">&lt;host&gt;</tt>, the <tt class=
       "LITERAL">&lt;port&gt;</tt> and the <tt class=
       "LITERAL">&lt;path&gt;</tt> are optional. (This is why the special
       <tt class="LITERAL">/</tt> pattern matches all URLs). Note that the
       "EMPHASIS">not</i></span> be included in the pattern. This is assumed
       already!</p>
 
-      <p>The pattern matching syntax is different for the domain and path
-      parts of the URL. The domain part uses a simple globbing type matching
+      <p>The pattern matching syntax is different for the host and path parts
+      of the URL. The host part uses a simple globbing type matching
       technique, while the path part uses more flexible <a href=
       "http://en.wikipedia.org/wiki/Regular_expressions" target=
       "_top"><span class="QUOTE">"Regular Expressions"</span></a> (POSIX
       1003.2).</p>
 
       <p>The port part of a pattern is a decimal port number preceded by a
-      colon (<tt class="LITERAL">:</tt>). If the domain part contains a
+      colon (<tt class="LITERAL">:</tt>). If the host part contains a
       numerical IPv6 address, it has to be put into angle brackets
       (<tt class="LITERAL">&lt;</tt>, <tt class="LITERAL">&gt;</tt>).</p>
 
           <dt><tt class="LITERAL">www.example.com/</tt></dt>
 
           <dd>
-            <p>is a domain-only pattern and will match any request to
+            <p>is a host-only pattern and will match any request to
             <tt class="LITERAL">www.example.com</tt>, regardless of which
             document on that server is requested. So ALL pages in this domain
             would be covered by the scope of this action. Note that a simple
           <dt><tt class="LITERAL">www.example.com</tt></dt>
 
           <dd>
-            <p>means exactly the same. For domain-only patterns, the trailing
+            <p>means exactly the same. For host-only patterns, the trailing
             <tt class="LITERAL">/</tt> may be omitted.</p>
           </dd>
 
             <p>Matches any URL pointing to TCP port 8000.</p>
           </dd>
 
+          <dt><tt class="LITERAL">10.0.0.1/</tt></dt>
+
+          <dd>
+            <p>Matches any URL with the host address <tt class=
+            "LITERAL">10.0.0.1</tt>. (Note that the real URL uses plain
+            brackets, not angle brackets.)</p>
+          </dd>
+
           <dt><tt class="LITERAL">&lt;2001:db8::1&gt;/</tt></dt>
 
           <dd>
       </div>
 
       <div class="SECT3">
-        <h3 class="SECT3"><a name="AEN2992" id="AEN2992">8.4.1. The Domain
-        Pattern</a></h3>
+        <h3 class="SECT3"><a name="HOST-PATTERN" id="HOST-PATTERN">8.4.1. The
+        Host Pattern</a></h3>
 
-        <p>The matching of the domain part offers some flexible options: if
-        the domain starts or ends with a dot, it becomes unanchored at that
-        end. For example:</p>
+        <p>The matching of the host part offers some flexible options: if the
+        host pattern starts or ends with a dot, it becomes unanchored at that
+        end. The host pattern is often referred to as domain pattern as it is
+        usually used to match domain names and not IP addresses. For
+        example:</p>
 
         <div class="VARIABLELIST">
           <dl>
       </div>
 
       <div class="SECT3">
-        <h3 class="SECT3"><a name="AEN3068" id="AEN3068">8.4.2. The Path
-        Pattern</a></h3>
+        <h3 class="SECT3"><a name="PATH-PATTERN" id="PATH-PATTERN">8.4.2. The
+        Path Pattern</a></h3>
 
         <p><span class="APPLICATION">Privoxy</span> uses <span class=
         "QUOTE">"modern"</span> POSIX 1003.2 <a href=
 
       <div class="SECT3">
         <h3 class="SECT3"><a name="TAG-PATTERN" id="TAG-PATTERN">8.4.3. The
-        Tag Pattern</a></h3>
+        Request Tag Pattern</a></h3>
 
-        <p>Tag patterns are used to change the applying actions based on the
-        request's tags. Tags can be created with either the <a href=
+        <p>Request tag patterns are used to change the applying actions based
+        on the request's tags. Tags can be created based on HTTP headers with
+        either the <a href=
         "actions-file.html#CLIENT-HEADER-TAGGER">client-header-tagger</a> or
         the <a href=
         "actions-file.html#SERVER-HEADER-TAGGER">server-header-tagger</a>
         action.</p>
 
-        <p>Tag patterns have to start with <span class="QUOTE">"TAG:"</span>,
-        so <span class="APPLICATION">Privoxy</span> can tell them apart from
-        URL patterns. Everything after the colon including white space, is
-        interpreted as a regular expression with path pattern syntax, except
-        that tag patterns aren't left-anchored automatically (<span class=
-        "APPLICATION">Privoxy</span> doesn't silently add a <span class=
-        "QUOTE">"^"</span>, you have to do it yourself if you need it).</p>
+        <p>Request tag patterns have to start with <span class=
+        "QUOTE">"TAG:"</span>, so <span class="APPLICATION">Privoxy</span>
+        can tell them apart from other patterns. Everything after the colon
+        including white space, is interpreted as a regular expression with
+        path pattern syntax, except that tag patterns aren't left-anchored
+        automatically (<span class="APPLICATION">Privoxy</span> doesn't
+        silently add a <span class="QUOTE">"^"</span>, you have to do it
+        yourself if you need it).</p>
 
         <p>To match all requests that are tagged with <span class=
         "QUOTE">"foo"</span> your pattern line should be <span class=
         "QUOTE">"TAG: foo"</span> wouldn't work as it requires white
         space.</p>
 
-        <p>Sections can contain URL and tag patterns at the same time, but
-        tag patterns are checked after the URL patterns and thus always
-        overrule them, even if they are located before the URL patterns.</p>
+        <p>Sections can contain URL and request tag patterns at the same
+        time, but request tag patterns are checked after the URL patterns and
+        thus always overrule them, even if they are located before the URL
+        patterns.</p>
 
-        <p>Once a new tag is added, Privoxy checks right away if it's matched
-        by one of the tag patterns and updates the action settings
-        accordingly. As a result tags can be used to activate other tagger
-        actions, as long as these other taggers look for headers that haven't
-        already be parsed.</p>
+        <p>Once a new request tag is added, Privoxy checks right away if it's
+        matched by one of the request tag patterns and updates the action
+        settings accordingly. As a result request tags can be used to
+        activate other tagger actions, as long as these other taggers look
+        for headers that haven't already be parsed.</p>
 
         <p>For example you could tag client requests which use the <tt class=
         "LITERAL">POST</tt> method, then use this tag to activate another
         indirection is seldom needed anyway and even the example doesn't make
         too much sense.</p>
       </div>
+
+      <div class="SECT3">
+        <h3 class="SECT3"><a name="NEGATIVE-TAG-PATTERNS" id=
+        "NEGATIVE-TAG-PATTERNS">8.4.4. The Negative Request Tag
+        Patterns</a></h3>
+
+        <p>To match requests that do not have a certain request tag, specify
+        a negative tag pattern by prefixing the tag pattern line with either
+        <span class="QUOTE">"NO-REQUEST-TAG:"</span> or <span class=
+        "QUOTE">"NO-RESPONSE-TAG:"</span> instead of <span class=
+        "QUOTE">"TAG:"</span>.</p>
+
+        <p>Negative request tag patterns created with <span class=
+        "QUOTE">"NO-REQUEST-TAG:"</span> are checked after all client headers
+        are scanned, the ones created with <span class=
+        "QUOTE">"NO-RESPONSE-TAG:"</span> are checked after all server
+        headers are scanned. In both cases all the created tags are
+        considered.</p>
+      </div>
+
+      <div class="SECT3">
+        <h3 class="SECT3"><a name="CLIENT-TAG-PATTERN" id=
+        "CLIENT-TAG-PATTERN">8.4.5. The Client Tag Pattern</a></h3>
+
+        <div class="WARNING">
+          <table class="WARNING" border="1" width="100%">
+            <tr>
+              <td align="center"><b>Warning</b></td>
+            </tr>
+
+            <tr>
+              <td align="left">
+                <p>This is an experimental feature. The syntax is likely to
+                change in future versions.</p>
+              </td>
+            </tr>
+          </table>
+        </div>
+
+        <p>Client tag patterns are not set based on HTTP headers but based on
+        the client's IP address. Users can enable them themselves, but the
+        Privoxy admin controls which tags are available and what their effect
+        is.</p>
+
+        <p>After a client-specific tag has been defined with the <a href=
+        "config.html#CLIENT-SPECIFIC-TAG">client-specific-tag</a>, directive,
+        action sections can be activated based on the tag by using a
+        CLIENT-TAG pattern. The CLIENT-TAG pattern is evaluated at the same
+        priority as URL patterns, as a result the last matching pattern wins.
+        Tags that are created based on client or server headers are evaluated
+        later on and can overrule CLIENT-TAG and URL patterns!</p>
+
+        <p>The tag is set for all requests that come from clients that
+        requested it to be set. Note that "clients" are differentiated by IP
+        address, if the IP address changes the tag has to be requested
+        again.</p>
+
+        <p>Clients can request tags to be set by using the CGI interface
+        <a href="http://config.privoxy.org/client-tags" target=
+        "_top">http://config.privoxy.org/client-tags</a>.</p>
+
+        <p>Example:</p>
+
+        <table border="0" bgcolor="#E0E0E0" width="100%">
+          <tr>
+            <td>
+              <pre class="SCREEN">
+# If the admin defined the client-specific-tag circumvent-blocks,
+# and the request comes from a client that previously requested
+# the tag to be set, overrule all previous +block actions that
+# are enabled based on URL to CLIENT-TAG patterns.
+{-block}
+CLIENT-TAG:^circumvent-blocks$
+
+# This section is not overruled because it's located after
+# the previous one.
+{+block{Nobody is supposed to request this.}}
+example.org/blocked-example-page
+</pre>
+            </td>
+          </tr>
+        </table>
+      </div>
     </div>
 
     <div class="SECT2">
                 <tr>
                   <td>
                     <pre class="SCREEN">
-+add-header{X-User-Tracking: sucks}
+# Add a DNT ("Do not track") header to all requests,
+# event to those that already have one.
+#
+# This is just an example, not a recommendation.
+#
+# There is no reason to believe that user-tracking websites care
+# about the DNT header and depending on the User-Agent, adding the
+# header may make user-tracking easier.
+{+add-header{DNT: 1}}
+/
 </pre>
                   </td>
                 </tr>
             <dt>Type:</dt>
 
             <dd>
-              <p>Parameterized.</p>
+              <p>Multi-value.</p>
             </dd>
 
             <dt>Parameter:</dt>
             <dt>Type:</dt>
 
             <dd>
-              <p>Parameterized.</p>
+              <p>Multi-value.</p>
             </dd>
 
             <dt>Parameter:</dt>
@@ -1971,9 +2076,104 @@ problem-host.example.com
         </div>
       </div>
 
+      <div class="SECT3">
+        <h4 class="SECT3"><a name="EXTERNAL-FILTER" id=
+        "EXTERNAL-FILTER">8.5.14. external-filter</a></h4>
+
+        <div class="VARIABLELIST">
+          <dl>
+            <dt>Typical use:</dt>
+
+            <dd>
+              <p>Modify content using a programming language of your
+              choice.</p>
+            </dd>
+
+            <dt>Effect:</dt>
+
+            <dd>
+              <p>All instances of text-based type, most notably HTML and
+              JavaScript, to which this action applies, can be filtered
+              on-the-fly through the specified external filter. By default
+              plain text documents are exempted from filtering, because web
+              servers often use the <tt class="LITERAL">text/plain</tt> MIME
+              type for all files whose type they don't know.)</p>
+            </dd>
+
+            <dt>Type:</dt>
+
+            <dd>
+              <p>Multi-value.</p>
+            </dd>
+
+            <dt>Parameter:</dt>
+
+            <dd>
+              <p>The name of an external content filter, as defined in the
+              <a href="filter-file.html">filter file</a>. External filters
+              can be defined in one or more files as defined by the
+              <tt class="LITERAL"><a href=
+              "config.html#FILTERFILE">filterfile</a></tt> option in the
+              <a href="config.html">config file</a>.</p>
+
+              <p>When used in its negative form, and without parameters,
+              <span class="emphasis"><i class="EMPHASIS">all</i></span>
+              filtering with external filters is completely disabled.</p>
+            </dd>
+
+            <dt>Notes:</dt>
+
+            <dd>
+              <p>External filters are scripts or programs that can modify the
+              content in case common <tt class="LITERAL"><a href=
+              "actions-file.html#FILTER">filters</a></tt> aren't powerful
+              enough. With the exception that this action doesn't use
+              pcrs-based filters, the notes in the <tt class=
+              "LITERAL"><a href="actions-file.html#FILTER">filter</a></tt>
+              section apply.</p>
+
+              <div class="WARNING">
+                <table class="WARNING" border="1" width="90%">
+                  <tr>
+                    <td align="center"><b>Warning</b></td>
+                  </tr>
+
+                  <tr>
+                    <td align="left">
+                      <p>Currently external filters are executed with
+                      <span class="APPLICATION">Privoxy</span>'s privileges.
+                      Only use external filters you understand and trust.</p>
+                    </td>
+                  </tr>
+                </table>
+              </div>
+
+              <p>This feature is experimental, the <tt class=
+              "LITERAL"><a href=
+              "filter-file.html#EXTERNAL-FILTER-SYNTAX">syntax</a></tt> may
+              change in the future.</p>
+            </dd>
+
+            <dt>Example usage:</dt>
+
+            <dd>
+              <table border="0" bgcolor="#E0E0E0" width="90%">
+                <tr>
+                  <td>
+                    <pre class="SCREEN">
++external-filter{fancy-filter}
+</pre>
+                  </td>
+                </tr>
+              </table>
+            </dd>
+          </dl>
+        </div>
+      </div>
+
       <div class="SECT3">
         <h4 class="SECT3"><a name="FAST-REDIRECTS" id=
-        "FAST-REDIRECTS">8.5.14. fast-redirects</a></h4>
+        "FAST-REDIRECTS">8.5.15. fast-redirects</a></h4>
 
         <div class="VARIABLELIST">
           <dl>
@@ -2095,7 +2295,7 @@ problem-host.example.com
       </div>
 
       <div class="SECT3">
-        <h4 class="SECT3"><a name="FILTER" id="FILTER">8.5.15.
+        <h4 class="SECT3"><a name="FILTER" id="FILTER">8.5.16.
         filter</a></h4>
 
         <div class="VARIABLELIST">
@@ -2123,7 +2323,7 @@ problem-host.example.com
             <dt>Type:</dt>
 
             <dd>
-              <p>Parameterized.</p>
+              <p>Multi-value.</p>
             </dd>
 
             <dt>Parameter:</dt>
@@ -2241,7 +2441,7 @@ problem-host.example.com
                 <tr>
                   <td>
                     <pre class="SCREEN">
-+filter{js-events}           # Kill all JS event bindings and timers (Radically destructive! Only for extra nasty sites).
++filter{js-events}           # Kill JavaScript event bindings and timers (Radically destructive! Only for extra nasty sites).
 </pre>
                   </td>
                 </tr>
@@ -2280,7 +2480,7 @@ problem-host.example.com
                 <tr>
                   <td>
                     <pre class="SCREEN">
-+filter{refresh-tags}        # Kill automatic refresh tags (for dial-on-demand setups).
++filter{refresh-tags}        # Kill automatic refresh tags if refresh time is larger than 9 seconds.
 </pre>
                   </td>
                 </tr>
@@ -2293,7 +2493,7 @@ problem-host.example.com
                 <tr>
                   <td>
                     <pre class="SCREEN">
-+filter{unsolicited-popups}  # Disable only unsolicited pop-up windows. Useful if your browser lacks this ability.
++filter{unsolicited-popups}  # Disable only unsolicited pop-up windows.
 </pre>
                   </td>
                 </tr>
@@ -2305,7 +2505,7 @@ problem-host.example.com
                 <tr>
                   <td>
                     <pre class="SCREEN">
-+filter{all-popups}          # Kill all popups in JavaScript and HTML. Useful if your browser lacks this ability.
++filter{all-popups}          # Kill all popups in JavaScript and HTML.
 </pre>
                   </td>
                 </tr>
@@ -2401,6 +2601,18 @@ problem-host.example.com
                 </tr>
               </table>
 
+              <p><a name="FILTER-IFRAMES" id="FILTER-IFRAMES"></a></p>
+
+              <table border="0" bgcolor="#E0E0E0" width="90%">
+                <tr>
+                  <td>
+                    <pre class="SCREEN">
++filter{iframes}             # Removes all detected iframes. Should only be enabled for individual sites.
+</pre>
+                  </td>
+                </tr>
+              </table>
+
               <p><a name="FILTER-DEMORONIZER" id=
               "FILTER-DEMORONIZER"></a></p>
 
@@ -2557,7 +2769,7 @@ problem-host.example.com
 
       <div class="SECT3">
         <h4 class="SECT3"><a name="FORCE-TEXT-MODE" id=
-        "FORCE-TEXT-MODE">8.5.16. force-text-mode</a></h4>
+        "FORCE-TEXT-MODE">8.5.17. force-text-mode</a></h4>
 
         <div class="VARIABLELIST">
           <dl>
@@ -2638,7 +2850,7 @@ problem-host.example.com
 
       <div class="SECT3">
         <h4 class="SECT3"><a name="FORWARD-OVERRIDE" id=
-        "FORWARD-OVERRIDE">8.5.17. forward-override</a></h4>
+        "FORWARD-OVERRIDE">8.5.18. forward-override</a></h4>
 
         <div class="VARIABLELIST">
           <dl>
@@ -2659,7 +2871,7 @@ problem-host.example.com
             <dt>Type:</dt>
 
             <dd>
-              <p>Multi-value.</p>
+              <p>Parameterized.</p>
             </dd>
 
             <dt>Parameter:</dt>
@@ -2698,6 +2910,30 @@ problem-host.example.com
                   <span class="QUOTE">"forward-socks5"</span> for socks5
                   connections (with remote DNS resolution).</p>
                 </li>
+
+                <li>
+                  <p><span class="QUOTE">"forward-webserver
+                  127.0.0.1:80"</span> to use the HTTP server listening at
+                  127.0.0.1 port 80 without adjusting the request
+                  headers.</p>
+
+                  <p>This makes it more convenient to use Privoxy to make
+                  existing websites available as onion services as well.</p>
+
+                  <p>Many websites serve content with hardcoded URLs and
+                  can't be easily adjusted to change the domain based on the
+                  one used by the client.</p>
+
+                  <p>Putting Privoxy between Tor and the webserver (or an
+                  stunnel that forwards to the webserver) allows to rewrite
+                  headers and content to make client and server happy at the
+                  same time.</p>
+
+                  <p>Using Privoxy for webservers that are only reachable
+                  through onion addresses and whose location is supposed to
+                  be secret is not recommended and should not be necessary
+                  anyway.</p>
+                </li>
               </ul>
             </dd>
 
@@ -2727,7 +2963,9 @@ problem-host.example.com
                       <p>If the ports are missing or invalid, default values
                       will be used. This might change in the future and you
                       shouldn't rely on it. Otherwise incorrect syntax causes
-                      Privoxy to exit.</p>
+                      Privoxy to exit. Due to design limitations, invalid
+                      parameter syntax isn't detected until the action is
+                      used the first time.</p>
 
                       <p>Use the <a href=
                       "http://config.privoxy.org/show-url-info" target=
@@ -2746,15 +2984,17 @@ problem-host.example.com
                 <tr>
                   <td>
                     <pre class="SCREEN">
-# Always use direct connections for requests previously tagged as
+# Use an ssh tunnel for requests previously tagged as
 # <span class="QUOTE">"User-Agent: fetch libfetch/2.0"</span> and make sure
 # resuming downloads continues to work.
+#
 # This way you can continue to use Tor for your normal browsing,
 # without overloading the Tor network with your FreeBSD ports updates
 # or downloads of bigger files like ISOs.
+#
 # Note that HTTP headers are easy to fake and therefore their
 # values are as (un)trustworthy as your clients and users.
-{+forward-override{forward .} \
+{+forward-override{forward-socks5 10.0.0.2:2222 .} \
  -hide-if-modified-since      \
  -overwrite-last-modified     \
 }
@@ -2771,7 +3011,7 @@ TAG:^User-Agent: fetch libfetch/2\.0$
 
       <div class="SECT3">
         <h4 class="SECT3"><a name="HANDLE-AS-EMPTY-DOCUMENT" id=
-        "HANDLE-AS-EMPTY-DOCUMENT">8.5.18. handle-as-empty-document</a></h4>
+        "HANDLE-AS-EMPTY-DOCUMENT">8.5.19. handle-as-empty-document</a></h4>
 
         <div class="VARIABLELIST">
           <dl>
@@ -2849,7 +3089,7 @@ example.org/.*\.js$
 
       <div class="SECT3">
         <h4 class="SECT3"><a name="HANDLE-AS-IMAGE" id=
-        "HANDLE-AS-IMAGE">8.5.19. handle-as-image</a></h4>
+        "HANDLE-AS-IMAGE">8.5.20. handle-as-image</a></h4>
 
         <div class="VARIABLELIST">
           <dl>
@@ -2938,7 +3178,7 @@ nasty-banner-server.example.com/junk.cgi\?output=trash
 
       <div class="SECT3">
         <h4 class="SECT3"><a name="HIDE-ACCEPT-LANGUAGE" id=
-        "HIDE-ACCEPT-LANGUAGE">8.5.20. hide-accept-language</a></h4>
+        "HIDE-ACCEPT-LANGUAGE">8.5.21. hide-accept-language</a></h4>
 
         <div class="VARIABLELIST">
           <dl>
@@ -3018,7 +3258,7 @@ nasty-banner-server.example.com/junk.cgi\?output=trash
 
       <div class="SECT3">
         <h4 class="SECT3"><a name="HIDE-CONTENT-DISPOSITION" id=
-        "HIDE-CONTENT-DISPOSITION">8.5.21. hide-content-disposition</a></h4>
+        "HIDE-CONTENT-DISPOSITION">8.5.22. hide-content-disposition</a></h4>
 
         <div class="VARIABLELIST">
           <dl>
@@ -3104,7 +3344,7 @@ nasty-banner-server.example.com/junk.cgi\?output=trash
 
       <div class="SECT3">
         <h4 class="SECT3"><a name="HIDE-IF-MODIFIED-SINCE" id=
-        "HIDE-IF-MODIFIED-SINCE">8.5.22. hide-if-modified-since</a></h4>
+        "HIDE-IF-MODIFIED-SINCE">8.5.23. hide-if-modified-since</a></h4>
 
         <div class="VARIABLELIST">
           <dl>
@@ -3191,7 +3431,7 @@ nasty-banner-server.example.com/junk.cgi\?output=trash
 
       <div class="SECT3">
         <h4 class="SECT3"><a name="HIDE-FROM-HEADER" id=
-        "HIDE-FROM-HEADER">8.5.23. hide-from-header</a></h4>
+        "HIDE-FROM-HEADER">8.5.24. hide-from-header</a></h4>
 
         <div class="VARIABLELIST">
           <dl>
@@ -3266,7 +3506,7 @@ nasty-banner-server.example.com/junk.cgi\?output=trash
       </div>
 
       <div class="SECT3">
-        <h4 class="SECT3"><a name="HIDE-REFERRER" id="HIDE-REFERRER">8.5.24.
+        <h4 class="SECT3"><a name="HIDE-REFERRER" id="HIDE-REFERRER">8.5.25.
         hide-referrer</a></h4><a name="HIDE-REFERER" id="HIDE-REFERER"></a>
 
         <div class="VARIABLELIST">
@@ -3386,7 +3626,7 @@ nasty-banner-server.example.com/junk.cgi\?output=trash
 
       <div class="SECT3">
         <h4 class="SECT3"><a name="HIDE-USER-AGENT" id=
-        "HIDE-USER-AGENT">8.5.25. hide-user-agent</a></h4>
+        "HIDE-USER-AGENT">8.5.26. hide-user-agent</a></h4>
 
         <div class="VARIABLELIST">
           <dl>
@@ -3475,7 +3715,7 @@ nasty-banner-server.example.com/junk.cgi\?output=trash
       </div>
 
       <div class="SECT3">
-        <h4 class="SECT3"><a name="LIMIT-CONNECT" id="LIMIT-CONNECT">8.5.26.
+        <h4 class="SECT3"><a name="LIMIT-CONNECT" id="LIMIT-CONNECT">8.5.27.
         limit-connect</a></h4>
 
         <div class="VARIABLELIST">
@@ -3556,7 +3796,7 @@ nasty-banner-server.example.com/junk.cgi\?output=trash
 
       <div class="SECT3">
         <h4 class="SECT3"><a name="LIMIT-COOKIE-LIFETIME" id=
-        "LIMIT-COOKIE-LIFETIME">8.5.27. limit-cookie-lifetime</a></h4>
+        "LIMIT-COOKIE-LIFETIME">8.5.28. limit-cookie-lifetime</a></h4>
 
         <div class="VARIABLELIST">
           <dl>
@@ -3638,7 +3878,7 @@ nasty-banner-server.example.com/junk.cgi\?output=trash
 
       <div class="SECT3">
         <h4 class="SECT3"><a name="PREVENT-COMPRESSION" id=
-        "PREVENT-COMPRESSION">8.5.28. prevent-compression</a></h4>
+        "PREVENT-COMPRESSION">8.5.29. prevent-compression</a></h4>
 
         <div class="VARIABLELIST">
           <dl>
@@ -3742,7 +3982,7 @@ nasty-banner-server.example.com/junk.cgi\?output=trash
 
       <div class="SECT3">
         <h4 class="SECT3"><a name="OVERWRITE-LAST-MODIFIED" id=
-        "OVERWRITE-LAST-MODIFIED">8.5.29. overwrite-last-modified</a></h4>
+        "OVERWRITE-LAST-MODIFIED">8.5.30. overwrite-last-modified</a></h4>
 
         <div class="VARIABLELIST">
           <dl>
@@ -3838,7 +4078,7 @@ nasty-banner-server.example.com/junk.cgi\?output=trash
       </div>
 
       <div class="SECT3">
-        <h4 class="SECT3"><a name="REDIRECT" id="REDIRECT">8.5.30.
+        <h4 class="SECT3"><a name="REDIRECT" id="REDIRECT">8.5.31.
         redirect</a></h4>
 
         <div class="VARIABLELIST">
@@ -3880,11 +4120,15 @@ nasty-banner-server.example.com/junk.cgi\?output=trash
               <p>The syntax for pcrs commands is documented in the <a href=
               "filter-file.html">filter file</a> section.</p>
 
-              <p>This action will be ignored if you use it together with
-              <tt class="LITERAL"><a href=
-              "actions-file.html#BLOCK">block</a></tt>. It can be combined
-              with <tt class="LITERAL"><a href=
-              "actions-file.html#FAST-REDIRECTS">fast-redirects{check-decoded-url}</a></tt>
+              <p>Requests can't be blocked and redirected at the same time,
+              applying this action together with <tt class="LITERAL"><a href=
+              "actions-file.html#BLOCK">block</a></tt> is a configuration
+              error. Currently the request is blocked and an error message
+              logged, the behavior may change in the future and result in
+              Privoxy rejecting the action file.</p>
+
+              <p>This action can be combined with <tt class=
+              "LITERAL"><a href="actions-file.html#FAST-REDIRECTS">fast-redirects{check-decoded-url}</a></tt>
               to redirect to a decoded version of a rewritten URL.</p>
 
               <p>Use this action carefully, make sure not to create
@@ -3908,9 +4152,9 @@ nasty-banner-server.example.com/junk.cgi\?output=trash
  example.com/stylesheet\.css
 
 # Create a short, easy to remember nickname for a favorite site
-# (relies on the browser accept and forward invalid URLs to <span class=
+# (relies on the browser to accept and forward invalid URLs to <span class=
 "APPLICATION">Privoxy</span>)
-{ +redirect{http://www.privoxy.org/user-manual/actions-file.html} }
+{ +redirect{https://www.privoxy.org/user-manual/actions-file.html} }
  a
 
 # Always use the expanded view for Undeadly.org articles
@@ -3927,6 +4171,19 @@ undeadly.org/cgi\?action=article&amp;sid=\d*$
 {+redirect{s@^http://[^/]*/results\.aspx\?q=([^&amp;]*).*@http://search.yahoo.com/search?p=$1@}}
 search.msn.com//results\.aspx\?q=
 
+# Redirect http://example.com/&amp;bla=fasel&amp;toChange=foo (and any other value but "bar")
+# to       http://example.com/&amp;bla=fasel&amp;toChange=bar
+#
+# The URL pattern makes sure that the following request isn't redirected again.
+{+redirect{s@toChange=[^&amp;]+@toChange=bar@}}
+example.com/.*toChange=(?!bar)
+
+# Add a shortcut to look up illumos bugs
+{+redirect{s@^http://i([0-9]+)/.*@https://www.illumos.org/issues/$1@}}
+# Redirected URL = http://i4974/
+# Redirect Destination = https://www.illumos.org/issues/4974
+i[0-9][0-9][0-9][0-9]*/
+
 # Redirect remote requests for this manual
 # to the local version delivered by Privoxy
 {+redirect{s@^http://www@http://config@}}
@@ -3942,7 +4199,7 @@ www.privoxy.org/user-manual/
 
       <div class="SECT3">
         <h4 class="SECT3"><a name="SERVER-HEADER-FILTER" id=
-        "SERVER-HEADER-FILTER">8.5.31. server-header-filter</a></h4>
+        "SERVER-HEADER-FILTER">8.5.32. server-header-filter</a></h4>
 
         <div class="VARIABLELIST">
           <dl>
@@ -3963,7 +4220,7 @@ www.privoxy.org/user-manual/
             <dt>Type:</dt>
 
             <dd>
-              <p>Parameterized.</p>
+              <p>Multi-value.</p>
             </dd>
 
             <dt>Parameter:</dt>
@@ -4014,7 +4271,7 @@ example.org/instance-that-is-delivered-as-xml-but-is-not
 
       <div class="SECT3">
         <h4 class="SECT3"><a name="SERVER-HEADER-TAGGER" id=
-        "SERVER-HEADER-TAGGER">8.5.32. server-header-tagger</a></h4>
+        "SERVER-HEADER-TAGGER">8.5.33. server-header-tagger</a></h4>
 
         <div class="VARIABLELIST">
           <dl>
@@ -4036,7 +4293,7 @@ example.org/instance-that-is-delivered-as-xml-but-is-not
             <dt>Type:</dt>
 
             <dd>
-              <p>Parameterized.</p>
+              <p>Multi-value.</p>
             </dd>
 
             <dt>Parameter:</dt>
@@ -4076,6 +4333,15 @@ example.org/instance-that-is-delivered-as-xml-but-is-not
 {+server-header-tagger{content-type}}
 /
 
+# If the response has a tag starting with 'image/' enable an external
+# filter that only applies to images.
+#
+# Note that the filter is not available by default, it's just a
+# <tt class="LITERAL"><a href=
+"filter-file.html#EXTERNAL-FILTER-SYNTAX">silly example</a></tt>.
+{+external-filter{rotate-image} +force-text-mode}
+TAG:^image/
+
 </pre>
                   </td>
                 </tr>
@@ -4087,7 +4353,7 @@ example.org/instance-that-is-delivered-as-xml-but-is-not
 
       <div class="SECT3">
         <h4 class="SECT3"><a name="SESSION-COOKIES-ONLY" id=
-        "SESSION-COOKIES-ONLY">8.5.33. session-cookies-only</a></h4>
+        "SESSION-COOKIES-ONLY">8.5.34. session-cookies-only</a></h4>
 
         <div class="VARIABLELIST">
           <dl>
@@ -4185,7 +4451,7 @@ example.org/instance-that-is-delivered-as-xml-but-is-not
 
       <div class="SECT3">
         <h4 class="SECT3"><a name="SET-IMAGE-BLOCKER" id=
-        "SET-IMAGE-BLOCKER">8.5.34. set-image-blocker</a></h4>
+        "SET-IMAGE-BLOCKER">8.5.35. set-image-blocker</a></h4>
 
         <div class="VARIABLELIST">
           <dl>
@@ -4324,7 +4590,7 @@ example.org/instance-that-is-delivered-as-xml-but-is-not
       </div>
 
       <div class="SECT3">
-        <h3 class="SECT3"><a name="AEN4740" id="AEN4740">8.5.35.
+        <h3 class="SECT3"><a name="SUMMARY" id="SUMMARY">8.5.36.
         Summary</a></h3>
 
         <p>Note that many of these actions have the potential to cause a page
@@ -4483,7 +4749,7 @@ example.org/instance-that-is-delivered-as-xml-but-is-not
       together:</p>
 
       <div class="SECT3">
-        <h3 class="SECT3"><a name="AEN4804" id="AEN4804">8.7.1.
+        <h3 class="SECT3"><a name="MATCH-ALL" id="MATCH-ALL">8.7.1.
         match-all.action</a></h3>
 
         <p>Remember <span class="emphasis"><i class="EMPHASIS">all actions
@@ -4532,7 +4798,7 @@ example.org/instance-that-is-delivered-as-xml-but-is-not
       </div>
 
       <div class="SECT3">
-        <h3 class="SECT3"><a name="AEN4826" id="AEN4826">8.7.2.
+        <h3 class="SECT3"><a name="DEFAULT-ACTION" id="DEFAULT-ACTION">8.7.2.
         default.action</a></h3>
 
         <p>If you aren't a developer, there's no need for you to edit the
@@ -4875,7 +5141,7 @@ wiki.
       </div>
 
       <div class="SECT3">
-        <h3 class="SECT3"><a name="AEN4939" id="AEN4939">8.7.3.
+        <h3 class="SECT3"><a name="USER-ACTION" id="USER-ACTION">8.7.3.
         user.action</a></h3>
 
         <p>So far we are painting with a broad brush by setting general