X-Git-Url: http://www.privoxy.org/gitweb/?p=privoxy.git;a=blobdiff_plain;f=doc%2Fsource%2Fuser-manual.sgml;h=a94d1d29988dde207849f9c629c6f11a4e73e9f1;hp=336155939e6af8c68beef86f242101f32be789aa;hb=f4107f65b676b63a199fe4230e58695757f9f199;hpb=65eac5e8553a475eff188a5b6e2a3256ed283a6f
diff --git a/doc/source/user-manual.sgml b/doc/source/user-manual.sgml
index 33615593..a94d1d29 100644
--- a/doc/source/user-manual.sgml
+++ b/doc/source/user-manual.sgml
@@ -11,8 +11,8 @@
-
-
+
+
@@ -33,9 +33,9 @@
This file belongs into
ijbswa.sourceforge.net:/home/groups/i/ij/ijbswa/htdocs/
- $Id: user-manual.sgml,v 2.45 2007/11/16 11:48:46 hal9 Exp $
+ $Id: user-manual.sgml,v 2.66 2008/03/06 16:33:47 fabiankeil Exp $
- Copyright (C) 2001-2007 Privoxy Developers http://www.privoxy.org/
+ Copyright (C) 2001-2008 Privoxy Developers http://www.privoxy.org/
See LICENSE.
========================================================================
@@ -54,12 +54,12 @@
- Copyright &my-copy; 2001 - 2007 by
+ Copyright &my-copy; 2001 - 2008 by
Privoxy Developers
-$Id: user-manual.sgml,v 2.45 2007/11/16 11:48:46 hal9 Exp $
+$Id: user-manual.sgml,v 2.66 2008/03/06 16:33:47 fabiankeil Exp $
-Mac OSX
-
- Unzip the downloaded file (you can either double-click on the file
- from the finder, or from the desktop if you downloaded it there).
- Then, double-click on the package installer icon named
- Privoxy.pkg
- and follow the installation process.
- Privoxy will be installed in the folder
- /Library/Privoxy.
- It will start automatically whenever you start up. To prevent it from
- starting automatically, remove or rename the folder
- /Library/StartupItems/Privoxy.
-
+Mac OS X
- To start Privoxy by hand, double-click on
- StartPrivoxy.command in the
- /Library/Privoxy folder.
- Or, type this command in the Terminal:
+ Unzip the downloaded file (you can either double-click on the zip file
+ icon from the Finder, or from the desktop if you downloaded it there).
+ Then, double-click on the package installer icon and follow the
+ installation process.
-
- /Library/Privoxy/StartPrivoxy.command
-
+ The privoxy service will automatically start after a successful
+ installation (in addition to every time your computer starts up). To
+ prevent the privoxy service from automatically starting when your
+ computer starts up, remove or rename the folder named
+ /Library/StartupItems/Privoxy.
- You will be prompted for the administrator password.
+ To manually start or stop the privoxy service, use the Privoxy Utility
+ for Mac OS X. This application controls the privoxy service (e.g.
+ starting and stopping the service as well as uninstalling the software).
@@ -589,155 +581,6 @@ How to install the binary packages depends on your operating system:
-
-
-
@@ -757,20 +600,32 @@ How to install the binary packages depends on your operating system:
+
+
+ The recommended way to upgrade &my-app; is to backup your old
+ configuration files, install the new ones, verify that &my-app;
+ is working correctly and finally merge back your changes using
+ diff and maybe patch.
+
+
+ There are a number of new features in each &my-app; release and
+ most of them have to be explicitly enabled in the configuration
+ files. Old configuration files obviously don't do that and due
+ to syntax changes using old configuration files with a new
+ &my-app; isn't always possible anyway.
+
+
- Some installers may remove earlier versions completely, including
- configuration files. Save any important configuration files!
+ Note that some installers remove earlier versions completely,
+ including configuration files, therefore you should really save
+ any important configuration files!
- On the other hand, other installers may not overwrite any existing configuration
- files, thinking you will want to do that. You may want to manually check
- your saved files against the newer versions to see if the improvements have
- merit, or whether there are new options that you may want to consider.
- There are a number of new features, but most won't be available unless
- these features are incorporated into your configuration somehow.
+ On the other hand, other installers don't overwrite existing configuration
+ files, thinking you will want to do that yourself.
@@ -779,31 +634,15 @@ How to install the binary packages depends on your operating system:
Not all actions as before.
-
-
-
- Logging is off by default now. If you need logging, it can be turned on
- in the config file.
-
-
+
+ In the default configuration only fatal errors are logged now.
+ You can change that in the debug section
+ of the configuration file. You may also want to enable more verbose
+ logging until you verified that the new &my-app; version is working
+ as expected.
+
+
@@ -1348,7 +1187,7 @@ How to install the binary packages depends on your operating system:
- Tools -> Options -> General -> Connection Settings -> Manual Proxy Configuration
+ Tools -> Options -> Advanced -> Network ->Connection -> Settings
@@ -1376,7 +1215,7 @@ How to install the binary packages depends on your operating system:
- For Internet Explorer v.5-6:
+ For Internet Explorer v.5-7:
@@ -1461,23 +1300,6 @@ How to install the binary packages depends on your operating system:
-
Windows
@@ -1519,7 +1341,35 @@ Example Unix startup command:
-Mac OSX
+Mac OS X
+
+ After downloading the privoxy software, unzip the downloaded file by
+ double-clicking on the zip file icon. Then, double-click on the
+ installer package icon and follow the installation process.
+
+
+ The privoxy service will automatically start after a successful
+ installation. In addition, the privoxy service will automatically
+ start every time your computer starts up.
+
+
+ To prevent the privoxy service from automatically starting when your
+ computer starts up, remove or rename the folder named
+ /Library/StartupItems/Privoxy.
+
+
+ A simple application named Privoxy Utility has been created which
+ enables administrators to easily start and stop the privoxy service.
+
+
+ In addition, the Privoxy Utility presents a simple way for
+ administrators to edit the various privoxy config files. A method
+ to uninstall the software is also available.
+
+
+ An administrator username and password must be supplied in order for
+ the Privoxy Utility to perform any of the tasks.
+
During installation, Privoxy is configured to
start automatically when the system restarts. To start &my-app; manually,
@@ -1606,11 +1456,9 @@ must find a better place for this paragraph
Another feature where you will probably want to define exceptions for trusted
- sites is the popup-killing (through the +kill-popups and
- +filter{popups}
- actions), because your favorite shopping, banking, or leisure site may need
+ sites is the popup-killing (through +filter{popups}),
+ because your favorite shopping, banking, or leisure site may need
popups (explained below).
@@ -2358,7 +2206,7 @@ for details.
- { +handle-as-image +block }
+ { +handle-as-image +block{Banner ads.} }
# Block these as if they were images. Send no block page.
banners.example.com
media.example.com/.*banners
@@ -2480,8 +2328,11 @@ for details.
.example.com
- matches any domain that ENDS in
- .example.com
+ matches any domain with first-level domain com
+ and second-level domain example.
+ For example www.example.com,
+ example.com and foo.bar.baz.example.com.
+ Note that it wouldn't match if the second-level domain was another-example.
@@ -2490,7 +2341,8 @@ for details.
matches any domain that STARTS with
- www.
+ www. (It also matches the domain
+ www but most of the time that doesn't matter.)
@@ -2784,7 +2636,7 @@ for details.
-name # disable action name
- Example: +block
+ Example: +handle-as-image
@@ -2967,14 +2819,14 @@ for details.
Type:
- Boolean.
+ Parameterized.Parameter:
- N/A
+ A block reason that should be given to the user.
@@ -2983,15 +2835,22 @@ for details.
Privoxy sends a special BLOCKED page
- for requests to blocked pages. This page contains links to find out why the request
- was blocked, and a click-through to the blocked content (the latter only if compiled with the
- force feature enabled). The BLOCKED page adapts to the available
+ for requests to blocked pages. This page contains the block reason given as
+ parameter, a link to find out why the block action applies, and a click-through
+ to the blocked content (the latter only if the force feature is available and
+ enabled).
+
+
A very important exception occurs if bothblock and handle-as-image,
@@ -3020,18 +2879,18 @@ for details.
Example usage (section):
- {+block}
+ {+block{No nasty stuff for you.}}
# Block and replace with "blocked" page
.nasty-stuff.example.com
-{+block +handle-as-image}
+{+block{Doubleclick banners.} +handle-as-image}
# Block and replace with image
.ad.doubleclick.net
.ads.r.us/banners/
-{+block +handle-as-empty-document}
+{+block{Layered ads.} +handle-as-empty-document}
# Block and then ignore
- adserver.exampleclick.net/.*\.js$
+ adserver.example.net/.*\.js$
@@ -3096,6 +2955,11 @@ for details.
Client-header filters are executed after the other header actions have finished
and use their output as input.
+
+ If the request URL gets changed, &my-app; will detect that and use the new
+ one. This can be used to rewrite the request destination behind the client's
+ back, for example to specify a Tor exit relay for certain requests.
+
Please refer to the filter file chapter
to learn which client-header filters are available by default, and how to
@@ -3110,8 +2974,9 @@ for details.
+# Hide Tor exit notation in Host and Referer Headers
{+client-header-filter{hide-tor-exit-notation}}
-.exit/
+/
@@ -4312,7 +4177,8 @@ new action
forward-socks4a 127.0.0.1:9050 . to use the socks4a proxy listening at
127.0.0.1 port 9050. Replace forward-socks4a with forward-socks4
- to use a socks4 connection (with local DNS resolution) instead.
+ to use a socks4 connection (with local DNS resolution) instead, use forward-socks5
+ for socks5 connections (with remote DNS resolution).
@@ -4320,7 +4186,8 @@ new action
forward-socks4a 127.0.0.1:9050 proxy.example.org:8000 to use the socks4a proxy
listening at 127.0.0.1 port 9050 to reach the HTTP proxy listening at proxy.example.org port 8000.
Replace forward-socks4a with forward-socks4 to use a socks4 connection
- (with local DNS resolution) instead.
+ (with local DNS resolution) instead, use forward-socks5
+ for socks5 connections (with remote DNS resolution).
@@ -4331,7 +4198,7 @@ new action
Notes:
- This action takes parameters similar to the
+ This action takes parameters similar to the
forward directives in the configuration
file, but without the URL pattern. It can be used as replacement, but normally it's only
used in cases where matching based on the request URL isn't sufficient.
@@ -4366,6 +4233,8 @@ new action
# 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 .} \
-hide-if-modified-since \
-overwrite-last-modified \
@@ -4447,7 +4316,7 @@ new action
# Block all documents on example.org that end with ".js",
# but send an empty document instead of the usual HTML message.
-{+block +handle-as-empty-document}
+{+block{Blocked JavaScript} +handle-as-empty-document}
example.org/.*\.js$
@@ -4534,11 +4403,8 @@ example.org/.*\.js$
# These don't look like images, but they're banners and should be
# blocked as images:
#
-{+block +handle-as-image}
-some.nasty-banner-server.com/junk.cgi\?output=trash
-
-# Banner source! Who cares if they also have non-image content?
-ad.doubleclick.net
+{+block{Nasty banners.} +handle-as-image}
+nasty-banner-server.example.com/junk.cgi\?output=trash
@@ -4780,8 +4646,8 @@ new action
Randomizing the value of the If-Modified-Since: makes
- sure it isn't used as a cookie replacement, but you will run into
- caching problems if the random range is too high.
+ it less likely that the server can use the time as a cookie replacement,
+ but you will run into caching problems if the random range is too high.
It is a good idea to only use a small negative value and let
@@ -4790,7 +4656,8 @@ new action
It is also recommended to use this action together with
- crunch-if-none-match.
+ crunch-if-none-match,
+ otherwise it's more or less pointless.
@@ -4799,8 +4666,8 @@ new action
Example usage (section):
- # Let the browser revalidate without being tracked across sessions
-{ +hide-if-modified-since{-60} \
+ # Let the browser revalidate but make tracking based on the time less likely.
+{+hide-if-modified-since{-60} \
+overwrite-last-modified{randomize} \
+crunch-if-none-match}
/
@@ -4818,7 +4685,7 @@ new action
Typical use:
- Improve privacy by not embedding the source of the request in the HTTP headers.
+ Improve privacy by not forwarding the source of the request in the HTTP headers.
@@ -4826,8 +4693,7 @@ new action
Effect:
- Deletes any existing X-Forwarded-for: HTTP header from client requests,
- and prevents adding a new one.
+ Deletes any existing X-Forwarded-for: HTTP header from client requests.
@@ -4853,7 +4719,7 @@ new action
Notes:
- It is safe to leave this on.
+ It is safe and recommended to leave this on.
@@ -4979,11 +4845,9 @@ new action
conditional-block to delete the header completely if the host has changed.
-
block to delete the header unconditionally.
@@ -5017,7 +4881,7 @@ new action
Always blocking the referrer, or using a custom one, can lead to
failures on servers that check the referrer before they answer any
- requests, in an attempt to prevent their valuable content from being
+ requests, in an attempt to prevent their content from being
embedded or linked to elsewhere.
@@ -5056,7 +4920,7 @@ new action
Typical use:
- Conceal your type of browser and client operating system
+ Try to conceal your type of browser and client operating system
@@ -5096,10 +4960,6 @@ new action
order to customize their content for different browsers (which, by the
way, is NOT the right thing to do: good web sites
work browser-independently).
-
@@ -5139,14 +4999,11 @@ new action
inspect-jpegs
-
Typical use:
- To protect against the MS buffer over-run in JPEG processing
+ Try to protect against a MS buffer over-run in JPEG processing
@@ -5185,12 +5042,13 @@ new action
allow execution of code on the target system, giving an attacker access
to the system in question by merely planting an altered JPEG image, which
would have no obvious indications of what lurks inside. This action
- prevents this exploit.
+ tries to prevent this exploit if delivered through unencrypted HTTP.
- Note that the described exploit is only one of many,
- using this action does not mean that you no longer
- have to patch the client.
+ Note that the exploit mentioned is several years old
+ and it's unlikely that your client is still vulnerable
+ against it. This action may be removed in one of the
+ next releases.
@@ -5206,105 +5064,6 @@ new action
-
-
-kill-popups
-
-
-
- Typical use:
-
- Eliminate those annoying pop-up windows (deprecated)
-
-
-
-
- Effect:
-
-
- While loading the document, replace JavaScript code that opens
- pop-up windows with (syntactically neutral) dummy code on the fly.
-
-
-
-
-
- Type:
-
-
- Boolean.
-
-
-
-
- Parameter:
-
-
- N/A
-
-
-
-
-
- Notes:
-
-
- This action is basically a built-in, hardwired special-purpose filter
- action, but there are important differences: For kill-popups,
- the document need not be buffered, so it can be incrementally rendered while
- downloading. But kill-popups doesn't catch as many pop-ups as
- filter{all-popups}
- does and is not as smart as filter{unsolicited-popups}
- is.
-
-
- Think of it as a fast and efficient replacement for a filter that you
- can use if you don't want any filtering at all. Note that it doesn't make
- sense to combine it with any filter action,
- since as soon as one filter applies,
- the whole document needs to be buffered anyway, which destroys the advantage of
- the kill-popups action over its filter equivalent.
-
-
- Killing all pop-ups unconditionally is problematic. Many shops and banks rely on
- pop-ups to display forms, shopping carts etc, and the filter{unsolicited-popups}
- does a better job of catching only the unwanted ones.
-
-
- If the only kind of pop-ups that you want to kill are exit consoles (those
- really nasty windows that appear when you close an other
- one), you might want to use
- filter{js-annoyances}
- instead.
-
-
- This action is most appropriate for browsers that don't have any controls
- for unwanted pop-ups. Not recommended for general usage.
-
-
-
-
-
-
-
- Example usage:
-
- +kill-popups
-
-
-
-
-
-
limit-connect
@@ -5349,26 +5108,21 @@ new action
By default, i.e. if no limit-connect action applies,
- Privoxy only allows HTTP CONNECT
- requests to port 443 (the standard, secure HTTPS port). Use
- limit-connect if more fine-grained control is desired
- for some or all destinations.
+ Privoxy allows HTTP CONNECT requests to all
+ ports. Use limit-connect if fine-grained control
+ is desired for some or all destinations.
The CONNECT methods exists in HTTP to allow access to secure websites
(https:// URLs) through proxies. It works very simply:
the proxy connects to the server on the specified port, and then
short-circuits its connections to the client and to the remote server.
- This can be a big security hole, since CONNECT-enabled proxies can be
- abused as TCP relays very easily.
+ This means CONNECT-enabled proxies can be used as TCP relays very easily.
Privoxy relays HTTPS traffic without seeing
the decoded content. Websites can leverage this limitation to circumvent &my-app;'s
filters. By specifying an invalid port range you can disable HTTPS entirely.
- If you plan to disable SSL by default, consider enabling
- treat-forbidden-connects-like-blocks
- as well, to be able to quickly create exceptions.
@@ -5380,7 +5134,7 @@ new action
- +limit-connect{443} # This is the default and need not be specified.
+ +limit-connect{443} # Port 443 is OK.
+limit-connect{80,443} # Ports 80 and 443 are OK.
+limit-connect{-3, 7, 20-100, 500-} # Ports less than 3, 7, 20 to 100 and above 500 are OK.
+limit-connect{-} # All ports are OK
@@ -5438,9 +5192,9 @@ new action
More and more websites send their content compressed by default, which
is generally a good idea and saves bandwidth. But the filter, deanimate-gifs
- and kill-popups actions need
- access to the uncompressed data.
+ linkend="filter">filter and
+ deanimate-gifs
+ actions need access to the uncompressed data.
When compiled with zlib support (available since &my-app; 3.0.7), content that should be
@@ -6193,81 +5947,6 @@ example.org/instance-that-is-delivered-as-xml-but-is-not
-
-
-treat-forbidden-connects-like-blocks
-
-
-
- Typical use:
-
- Block forbidden connects with an easy to find error message.
-
-
-
-
- Effect:
-
-
- If this action is enabled, Privoxy no longer
- makes a difference between forbidden connects and ordinary blocks.
-
-
-
-
-
- Type:
-
-
- Boolean
-
-
-
-
- Parameter:
-
- N/A
-
-
-
-
- Notes:
-
-
- By default Privoxy answers
- forbidden Connect requests
- with a short error message inside the headers. If the browser doesn't display
- headers (most don't), you just see an empty page.
-
-
- With this action enabled, Privoxy displays
- the message that is used for ordinary blocks instead. If you decide
- to make an exception for the page in question, you can do so by
- following the See why link.
-
-
- For Connect requests the clients tell
- Privoxy which host they are interested
- in, but not which document they plan to get later. As a result, the
- Go there anyway wouldn't work and is therefore suppressed.
-
-
-
-
-
- Example usage:
-
-
- +treat-forbidden-connects-like-blocks
-
-
-
-
-
-
-
Summary
@@ -6342,15 +6021,15 @@ new action
#
+crunch-all-cookies = +crunch-incoming-cookies +crunch-outgoing-cookies
-crunch-all-cookies = -crunch-incoming-cookies -crunch-outgoing-cookies
- +block-as-image = +block +handle-as-image
+ +block-as-image = +block{Blocked image.} +handle-as-image
allow-all-cookies = -crunch-all-cookies -session-cookies-only -filter{content-cookies}
# These aliases define combinations of actions
# that are useful for certain types of sites:
#
- fragile = -block -filter -crunch-all-cookies -fast-redirects -hide-referrer -kill-popups -prevent-compression
+ fragile = -block -filter -crunch-all-cookies -fast-redirects -hide-referrer -prevent-compression
- shop = -crunch-all-cookies -filter{all-popups} -kill-popups
+ shop = -crunch-all-cookies -filter{all-popups}
# Short names for other aliases, for really lazy people ;-)
#
@@ -6385,7 +6064,7 @@ new action
# These shops require pop-ups:
#
- {-kill-popups -filter{all-popups} -filter{unsolicited-popups}}
+ {-filter{all-popups} -filter{unsolicited-popups}}
.dabs.com
.overclockers.co.uk
@@ -6456,14 +6135,14 @@ that also explains why and how aliases are used:
#
+crunch-all-cookies = +crunch-incoming-cookies +crunch-outgoing-cookies
-crunch-all-cookies = -crunch-incoming-cookies -crunch-outgoing-cookies
- +block-as-image = +block +handle-as-image
+ +block-as-image = +block{Blocked image.} +handle-as-image
mercy-for-cookies = -crunch-all-cookies -session-cookies-only -filter{content-cookies}
# These aliases define combinations of actions
# that are useful for certain types of sites:
#
- fragile = -block -filter -crunch-all-cookies -fast-redirects -hide-referrer -kill-popups
- shop = -crunch-all-cookies -filter{all-popups} -kill-popups
+ fragile = -block -filter -crunch-all-cookies -fast-redirects -hide-referrer
+ shop = -crunch-all-cookies -filter{all-popups}
@@ -6576,8 +6255,7 @@ mail.google.com
now. Mozilla users, who
can turn on smart handling of unwanted pop-ups in their browsers, can
safely choose
- -filter{popups} (and
- -kill-popups) above
+ -filter{popups} above
and hence don't need this section. Anyway, disabling an already disabled
action doesn't hurt, so we'll define our exceptions regardless of what was
chosen in the defaults section:
@@ -6587,7 +6265,7 @@ mail.google.com
# These sites require pop-ups too :(
#
-{ -kill-popups -filter{popups} }
+{ -filter{popups} }
.dabs.com
.overclockers.co.uk
.deutsche-bank-24.de
@@ -6690,7 +6368,7 @@ bs*.gsanet.com
##########################################################################
# Block these fine banners:
##########################################################################
-{ +block }
+{ +block{Banner ads.} }
# Generic patterns:
#
@@ -6836,14 +6514,14 @@ wiki.
+crunch-all-cookies = +crunch-incoming-cookies +crunch-outgoing-cookies
-crunch-all-cookies = -crunch-incoming-cookies -crunch-outgoing-cookies
allow-all-cookies = -crunch-all-cookies -session-cookies-only
- allow-popups = -filter{all-popups} -kill-popups
-+block-as-image = +block +handle-as-image
+ allow-popups = -filter{all-popups}
++block-as-image = +block{Blocked as image.} +handle-as-image
-block-as-image = -block
# These aliases define combinations of actions that are useful for
# certain types of sites:
#
-fragile = -block -crunch-all-cookies -filter -fast-redirects -hide-referrer -kill-popups
+fragile = -block -crunch-all-cookies -filter -fast-redirects -hide-referrer
shop = -crunch-all-cookies allow-popups
# Allow ads for selected useful free sites:
@@ -6907,7 +6585,7 @@ stupid-server.example.com/
seen an ad on your favourite page on example.com that you want to get rid of.
You have right-clicked the image, selected copy image location
and pasted the URL below while removing the leading http://, into a
- { +block } section. Note that { +handle-as-image
+ { +block{} } section. Note that { +handle-as-image
} need not be specified, since all URLs ending in
.gif will be tagged as images by the general rules as set
in default.action anyway:
@@ -6915,7 +6593,7 @@ stupid-server.example.com/
-{ +block }
+{ +block{Nasty ads.} }
www.example.com/nasty-ads/sponsor\.gif
another.example.net/more/junk/here/
@@ -7082,8 +6760,7 @@ stupid-server.example.com/
default.filter. It is recommended that any locally
defined or modified filters go in a separately defined file such as
user.filter.
-
-
+
Common tasks for content filters are to eliminate common annoyances in
@@ -8537,13 +8214,6 @@ Requests
actions.
-
-
- If the +kill-popups
- action applies, and it is an HTML or JavaScript document, the popup-code in the
- response is filtered on-the-fly as it is received.
-
-
If any +filter action
@@ -8798,7 +8468,6 @@ In file: user.action [ View ][ Edit ][ View ][ Edit ]
+ +set-image-blocker {pattern}
@@ -8826,21 +8494,21 @@ In file: user.action [ View ][ Edit ]
- { +block }
+ { +block{Domains starts with "ad"} }
ad*.
- { +block }
+ { +block{Domain contains "ad"} }
.ad.
- { +block +handle-as-image }
+ { +block{Doubleclick banner server} +handle-as-image }
.[a-vx-z]*.doubleclick.net
We'll just show the interesting part here - the explicit matches. It is
- matched three different times. Two +block sections,
- and a +block +handle-as-image,
+ matched three different times. Two +block{} sections,
+ and a +block{} +handle-as-image,
which is the expanded form of one of our aliases that had been defined as:
+block-as-image. (Aliases are defined in
@@ -8855,7 +8523,7 @@ In file: user.action [ View ][ Edit ]ad.doubleclick.net
is done here -- as both a +block
+ linkend="BLOCK">+block{}and an
+handle-as-image.
The custom alias +block-as-image just
@@ -8922,7 +8590,6 @@ In file: user.action [ View ][ Edit ][ View ][ Edit ]
@@ -8977,7 +8643,7 @@ In file: user.action [ View ][ Edit ]
- { +block +handle-as-image }
+ { +block{Path starts with "ads".} +handle-as-image }
/ads
@@ -9093,6 +8759,76 @@ In file: user.action [ View ][ Edit ][ View ][ Edit ][ View ][ Edit ][ View ][ Edit ][ View ][ Edit ]