generated
[privoxy.git] / doc / webserver / user-manual / appendix.html
1 <HTML
2 ><HEAD
3 ><TITLE
4 >Appendix</TITLE
5 ><META
6 NAME="GENERATOR"
7 CONTENT="Modular DocBook HTML Stylesheet Version 1.64
8 "><LINK
9 REL="HOME"
10 TITLE="Privoxy User Manual"
11 HREF="index.html"><LINK
12 REL="PREVIOUS"
13 TITLE="See Also"
14 HREF="seealso.html"><LINK
15 REL="STYLESHEET"
16 TYPE="text/css"
17 HREF="../p_doc.css"></HEAD
18 ><BODY
19 CLASS="SECT1"
20 BGCOLOR="#EEEEEE"
21 TEXT="#000000"
22 LINK="#0000FF"
23 VLINK="#840084"
24 ALINK="#0000FF"
25 ><DIV
26 CLASS="NAVHEADER"
27 ><TABLE
28 WIDTH="100%"
29 BORDER="0"
30 CELLPADDING="0"
31 CELLSPACING="0"
32 ><TR
33 ><TH
34 COLSPAN="3"
35 ALIGN="center"
36 >Privoxy User Manual</TH
37 ></TR
38 ><TR
39 ><TD
40 WIDTH="10%"
41 ALIGN="left"
42 VALIGN="bottom"
43 ><A
44 HREF="seealso.html"
45 >Prev</A
46 ></TD
47 ><TD
48 WIDTH="80%"
49 ALIGN="center"
50 VALIGN="bottom"
51 ></TD
52 ><TD
53 WIDTH="10%"
54 ALIGN="right"
55 VALIGN="bottom"
56 >&nbsp;</TD
57 ></TR
58 ></TABLE
59 ><HR
60 ALIGN="LEFT"
61 WIDTH="100%"></DIV
62 ><DIV
63 CLASS="SECT1"
64 ><H1
65 CLASS="SECT1"
66 ><A
67 NAME="APPENDIX"
68 >14. Appendix</A
69 ></H1
70 ><DIV
71 CLASS="SECT2"
72 ><H2
73 CLASS="SECT2"
74 ><A
75 NAME="REGEX"
76 >14.1. Regular Expressions</A
77 ></H2
78 ><P
79 > <SPAN
80 CLASS="APPLICATION"
81 >Privoxy</SPAN
82 > can use <SPAN
83 CLASS="QUOTE"
84 >"regular expressions"</SPAN
85
86  in various config files. Assuming support for <SPAN
87 CLASS="QUOTE"
88 >"pcre"</SPAN
89 > (Perl
90  Compatible Regular Expressions) is compiled in, which is the default. Such
91  configuration directives do not require regular expressions, but they can be
92  used to increase flexibility by matching a pattern with wild-cards against
93  URLs.</P
94 ><P
95 > If you are reading this, you probably don't understand what <SPAN
96 CLASS="QUOTE"
97 >"regular
98  expressions"</SPAN
99 > are, or what they can do. So this will be a very brief
100  introduction only. A full explanation would require a book ;-)</P
101 ><P
102 > <SPAN
103 CLASS="QUOTE"
104 >"Regular expressions"</SPAN
105 > is a way of matching one character
106  expression against another to see if it matches or not. One of the
107  <SPAN
108 CLASS="QUOTE"
109 >"expressions"</SPAN
110 > is a literal string of readable characters
111  (letter, numbers, etc), and the other is a complex string of literal
112  characters combined with wild-cards, and other special characters, called
113  meta-characters. The <SPAN
114 CLASS="QUOTE"
115 >"meta-characters"</SPAN
116 > have special meanings and
117  are used to build the complex pattern to be matched against. Perl Compatible
118  Regular Expressions is an enhanced form of the regular expression language
119  with backward compatibility.</P
120 ><P
121 > To make a simple analogy, we do something similar when we use wild-card
122  characters when listing files with the <B
123 CLASS="COMMAND"
124 >dir</B
125 > command in DOS. 
126  <TT
127 CLASS="LITERAL"
128 >*.*</TT
129 > matches all filenames. The <SPAN
130 CLASS="QUOTE"
131 >"special"</SPAN
132 >
133  character here is the asterisk which matches any and all characters. We can be
134  more specific and use <TT
135 CLASS="LITERAL"
136 >?</TT
137 > to match just individual
138  characters. So <SPAN
139 CLASS="QUOTE"
140 >"dir file?.text"</SPAN
141 > would match
142  <SPAN
143 CLASS="QUOTE"
144 >"file1.txt"</SPAN
145 >, <SPAN
146 CLASS="QUOTE"
147 >"file2.txt"</SPAN
148 >, etc. We are pattern
149  matching, using a similar technique to <SPAN
150 CLASS="QUOTE"
151 >"regular expressions"</SPAN
152 >!</P
153 ><P
154 > Regular expressions do essentially the same thing, but are much, much more
155  powerful. There are many more <SPAN
156 CLASS="QUOTE"
157 >"special characters"</SPAN
158 > and ways of 
159  building complex patterns however. Let's look at a few of the common ones,
160  and then some examples:</P
161 ><P
162 ><P
163 ></P
164 ><TABLE
165 BORDER="0"
166 ><TBODY
167 ><TR
168 ><TD
169 >  <I
170 CLASS="EMPHASIS"
171 >.</I
172 > - Matches any single character, e.g. <SPAN
173 CLASS="QUOTE"
174 >"a"</SPAN
175 >,
176   <SPAN
177 CLASS="QUOTE"
178 >"A"</SPAN
179 >, <SPAN
180 CLASS="QUOTE"
181 >"4"</SPAN
182 >, <SPAN
183 CLASS="QUOTE"
184 >":"</SPAN
185 >, or <SPAN
186 CLASS="QUOTE"
187 >"@"</SPAN
188 >.
189  </TD
190 ></TR
191 ></TBODY
192 ></TABLE
193 ><P
194 ></P
195 ></P
196 ><P
197 ><P
198 ></P
199 ><TABLE
200 BORDER="0"
201 ><TBODY
202 ><TR
203 ><TD
204 >  <I
205 CLASS="EMPHASIS"
206 >?</I
207 > - The preceding character or expression is matched ZERO or ONE
208   times. Either/or.
209  </TD
210 ></TR
211 ></TBODY
212 ></TABLE
213 ><P
214 ></P
215 ></P
216 ><P
217 ><P
218 ></P
219 ><TABLE
220 BORDER="0"
221 ><TBODY
222 ><TR
223 ><TD
224 >  <I
225 CLASS="EMPHASIS"
226 >+</I
227 > - The preceding character or expression is matched ONE or MORE
228   times.
229  </TD
230 ></TR
231 ></TBODY
232 ></TABLE
233 ><P
234 ></P
235 ></P
236 ><P
237 ><P
238 ></P
239 ><TABLE
240 BORDER="0"
241 ><TBODY
242 ><TR
243 ><TD
244 >  <I
245 CLASS="EMPHASIS"
246 >*</I
247 > - The preceding character or expression is matched ZERO or MORE
248   times.
249  </TD
250 ></TR
251 ></TBODY
252 ></TABLE
253 ><P
254 ></P
255 ></P
256 ><P
257 ><P
258 ></P
259 ><TABLE
260 BORDER="0"
261 ><TBODY
262 ><TR
263 ><TD
264 >  <I
265 CLASS="EMPHASIS"
266 >\</I
267 > - The <SPAN
268 CLASS="QUOTE"
269 >"escape"</SPAN
270 > character denotes that
271   the following character should be taken literally. This is used where one of the 
272   special characters (e.g. <SPAN
273 CLASS="QUOTE"
274 >"."</SPAN
275 >) needs to be taken literally and
276   not as a special meta-character. Example: <SPAN
277 CLASS="QUOTE"
278 >"example\.com"</SPAN
279 >, makes 
280   sure the period is recognized only as a period (and not expanded to its 
281   meta-character meaning of any single character).
282  </TD
283 ></TR
284 ></TBODY
285 ></TABLE
286 ><P
287 ></P
288 ></P
289 ><P
290 ><P
291 ></P
292 ><TABLE
293 BORDER="0"
294 ><TBODY
295 ><TR
296 ><TD
297 >  <I
298 CLASS="EMPHASIS"
299 >[]</I
300 > - Characters enclosed in brackets will be matched if
301   any of the enclosed characters are encountered. For instance, <SPAN
302 CLASS="QUOTE"
303 >"[0-9]"</SPAN
304 >
305   matches any numeric digit (zero through nine). As an example, we can combine 
306   this with <SPAN
307 CLASS="QUOTE"
308 >"+"</SPAN
309 > to match any digit one of more times: <SPAN
310 CLASS="QUOTE"
311 >"[0-9]+"</SPAN
312 >.
313  </TD
314 ></TR
315 ></TBODY
316 ></TABLE
317 ><P
318 ></P
319 ></P
320 ><P
321 ><P
322 ></P
323 ><TABLE
324 BORDER="0"
325 ><TBODY
326 ><TR
327 ><TD
328 >  <I
329 CLASS="EMPHASIS"
330 >()</I
331 > - parentheses are used to group a sub-expression,
332   or multiple sub-expressions.
333  </TD
334 ></TR
335 ></TBODY
336 ></TABLE
337 ><P
338 ></P
339 ></P
340 ><P
341 ><P
342 ></P
343 ><TABLE
344 BORDER="0"
345 ><TBODY
346 ><TR
347 ><TD
348 >  <I
349 CLASS="EMPHASIS"
350 >|</I
351 > - The <SPAN
352 CLASS="QUOTE"
353 >"bar"</SPAN
354 > character works like an
355   <SPAN
356 CLASS="QUOTE"
357 >"or"</SPAN
358 > conditional statement. A match is successful if the
359   sub-expression on either side of <SPAN
360 CLASS="QUOTE"
361 >"|"</SPAN
362 > matches. As an example:
363   <SPAN
364 CLASS="QUOTE"
365 >"/(this|that) example/"</SPAN
366 > uses grouping and the bar character 
367   and would match either <SPAN
368 CLASS="QUOTE"
369 >"this example"</SPAN
370 > or <SPAN
371 CLASS="QUOTE"
372 >"that
373   example"</SPAN
374 >, and nothing else.
375  </TD
376 ></TR
377 ></TBODY
378 ></TABLE
379 ><P
380 ></P
381 ></P
382 ><P
383 ><P
384 ></P
385 ><TABLE
386 BORDER="0"
387 ><TBODY
388 ><TR
389 ><TD
390 >  <I
391 CLASS="EMPHASIS"
392 >s/string1/string2/g</I
393 > - This is used to rewrite strings of text. 
394   <SPAN
395 CLASS="QUOTE"
396 >"string1"</SPAN
397 > is replaced by <SPAN
398 CLASS="QUOTE"
399 >"string2"</SPAN
400 > in this
401   example. There must of course be a match on <SPAN
402 CLASS="QUOTE"
403 >"string1"</SPAN
404 > first.
405  </TD
406 ></TR
407 ></TBODY
408 ></TABLE
409 ><P
410 ></P
411 ></P
412 ><P
413 > These are just some of the ones you are likely to use when matching URLs with 
414  <SPAN
415 CLASS="APPLICATION"
416 >Privoxy</SPAN
417 >, and is a long way from a definitive
418  list. This is enough to get us started with a few simple examples which may
419  be more illuminating:</P
420 ><P
421 > <I
422 CLASS="EMPHASIS"
423 ><TT
424 CLASS="LITERAL"
425 >/.*/banners/.*</TT
426 ></I
427 > - A  simple example
428  that uses the common combination of <SPAN
429 CLASS="QUOTE"
430 >"."</SPAN
431 > and <SPAN
432 CLASS="QUOTE"
433 >"*"</SPAN
434 > to 
435  denote any character, zero or more times. In other words, any string at all.
436  So we start with a literal forward slash, then our regular expression pattern 
437  (<SPAN
438 CLASS="QUOTE"
439 >".*"</SPAN
440 >) another literal forward slash, the string
441  <SPAN
442 CLASS="QUOTE"
443 >"banners"</SPAN
444 >, another forward slash, and lastly another
445  <SPAN
446 CLASS="QUOTE"
447 >".*"</SPAN
448 >. We are building 
449  a directory path here. This will match any file with the path that has a
450  directory named <SPAN
451 CLASS="QUOTE"
452 >"banners"</SPAN
453 > in it. The <SPAN
454 CLASS="QUOTE"
455 >".*"</SPAN
456 > matches
457  any characters, and this could conceivably be more forward slashes, so it
458  might expand into a much longer looking path. For example, this could match:
459  <SPAN
460 CLASS="QUOTE"
461 >"/eye/hate/spammers/banners/annoy_me_please.gif"</SPAN
462 >, or just
463  <SPAN
464 CLASS="QUOTE"
465 >"/banners/annoying.html"</SPAN
466 >, or almost an infinite number of other
467  possible combinations, just so it has <SPAN
468 CLASS="QUOTE"
469 >"banners"</SPAN
470 > in the path
471  somewhere.</P
472 ><P
473 > A now something a little more complex:</P
474 ><P
475 > <I
476 CLASS="EMPHASIS"
477 ><TT
478 CLASS="LITERAL"
479 >/.*/adv((er)?ts?|ertis(ing|ements?))?/</TT
480 ></I
481 > - 
482  We have several literal forward slashes again (<SPAN
483 CLASS="QUOTE"
484 >"/"</SPAN
485 >), so we are
486  building another expression that is a file path statement. We have another 
487  <SPAN
488 CLASS="QUOTE"
489 >".*"</SPAN
490 >, so we are matching against any conceivable sub-path, just so
491  it matches our expression. The only true literal that <I
492 CLASS="EMPHASIS"
493 >must
494  match</I
495 > our pattern is <SPAN
496 CLASS="APPLICATION"
497 >adv</SPAN
498 >, together with
499  the forward slashes. What comes after the <SPAN
500 CLASS="QUOTE"
501 >"adv"</SPAN
502 > string is the
503  interesting part. </P
504 ><P
505 > Remember the <SPAN
506 CLASS="QUOTE"
507 >"?"</SPAN
508 > means the preceding expression (either a
509  literal character or anything grouped with <SPAN
510 CLASS="QUOTE"
511 >"(...)"</SPAN
512 > in this case)
513  can exist or not, since this means either zero or one match. So
514  <SPAN
515 CLASS="QUOTE"
516 >"((er)?ts?|ertis(ing|ements?))"</SPAN
517 > is optional, as are the
518  individual sub-expressions: <SPAN
519 CLASS="QUOTE"
520 >"(er)"</SPAN
521 >,
522  <SPAN
523 CLASS="QUOTE"
524 >"(ing|ements?)"</SPAN
525 >, and the <SPAN
526 CLASS="QUOTE"
527 >"s"</SPAN
528 >. The <SPAN
529 CLASS="QUOTE"
530 >"|"</SPAN
531 >
532  means <SPAN
533 CLASS="QUOTE"
534 >"or"</SPAN
535 >. We have two of those. For instance, 
536  <SPAN
537 CLASS="QUOTE"
538 >"(ing|ements?)"</SPAN
539 >, can expand to match either <SPAN
540 CLASS="QUOTE"
541 >"ing"</SPAN
542
543  <I
544 CLASS="EMPHASIS"
545 >OR</I
546 > <SPAN
547 CLASS="QUOTE"
548 >"ements?"</SPAN
549 >. What is being done here, is an
550  attempt at matching as many variations of <SPAN
551 CLASS="QUOTE"
552 >"advertisement"</SPAN
553 >, and 
554  similar, as possible. So this would expand to match just <SPAN
555 CLASS="QUOTE"
556 >"adv"</SPAN
557 >,
558  or <SPAN
559 CLASS="QUOTE"
560 >"advert"</SPAN
561 >, or <SPAN
562 CLASS="QUOTE"
563 >"adverts"</SPAN
564 >, or
565  <SPAN
566 CLASS="QUOTE"
567 >"advertising"</SPAN
568 >, or <SPAN
569 CLASS="QUOTE"
570 >"advertisement"</SPAN
571 >, or
572  <SPAN
573 CLASS="QUOTE"
574 >"advertisements"</SPAN
575 >. You get the idea. But it would not match 
576  <SPAN
577 CLASS="QUOTE"
578 >"advertizements"</SPAN
579 > (with a <SPAN
580 CLASS="QUOTE"
581 >"z"</SPAN
582 >). We could fix that by
583  changing our regular expression to: 
584  <SPAN
585 CLASS="QUOTE"
586 >"/.*/adv((er)?ts?|erti(s|z)(ing|ements?))?/"</SPAN
587 >, which would then match
588  either spelling.</P
589 ><P
590 > <I
591 CLASS="EMPHASIS"
592 ><TT
593 CLASS="LITERAL"
594 >/.*/advert[0-9]+\.(gif|jpe?g)</TT
595 ></I
596 > - Again 
597  another path statement with forward slashes. Anything in the square brackets 
598  <SPAN
599 CLASS="QUOTE"
600 >"[]"</SPAN
601 > can be matched. This is using <SPAN
602 CLASS="QUOTE"
603 >"0-9"</SPAN
604 > as a
605  shorthand expression to mean any digit one through nine. It is the same as
606  saying <SPAN
607 CLASS="QUOTE"
608 >"0123456789"</SPAN
609 >. So any digit matches. The <SPAN
610 CLASS="QUOTE"
611 >"+"</SPAN
612 >
613  means one or more of the preceding expression must be included. The preceding 
614  expression here is what is in the square brackets -- in this case, any digit 
615  one through nine. Then, at the end, we have a grouping: <SPAN
616 CLASS="QUOTE"
617 >"(gif|jpe?g)"</SPAN
618 >. 
619  This includes a <SPAN
620 CLASS="QUOTE"
621 >"|"</SPAN
622 >, so this needs to match the expression on
623  either side of that bar character also. A simple <SPAN
624 CLASS="QUOTE"
625 >"gif"</SPAN
626 > on one side, and the other
627  side will in turn match either <SPAN
628 CLASS="QUOTE"
629 >"jpeg"</SPAN
630 > or <SPAN
631 CLASS="QUOTE"
632 >"jpg"</SPAN
633 >,
634  since the <SPAN
635 CLASS="QUOTE"
636 >"?"</SPAN
637 > means the letter <SPAN
638 CLASS="QUOTE"
639 >"e"</SPAN
640 > is optional and
641  can be matched once or not at all. So we are building an expression here to
642  match image GIF or JPEG type image file. It must include the literal
643  string <SPAN
644 CLASS="QUOTE"
645 >"advert"</SPAN
646 >, then one or more digits, and a <SPAN
647 CLASS="QUOTE"
648 >"."</SPAN
649 >
650  (which is now a literal, and not a special character, since it is escaped
651  with <SPAN
652 CLASS="QUOTE"
653 >"\"</SPAN
654 >), and lastly either <SPAN
655 CLASS="QUOTE"
656 >"gif"</SPAN
657 >, or
658  <SPAN
659 CLASS="QUOTE"
660 >"jpeg"</SPAN
661 >, or <SPAN
662 CLASS="QUOTE"
663 >"jpg"</SPAN
664 >. Some possible matches would
665  include: <SPAN
666 CLASS="QUOTE"
667 >"//advert1.jpg"</SPAN
668 >,
669  <SPAN
670 CLASS="QUOTE"
671 >"/nasty/ads/advert1234.gif"</SPAN
672 >,
673  <SPAN
674 CLASS="QUOTE"
675 >"/banners/from/hell/advert99.jpg"</SPAN
676 >. It would not match
677  <SPAN
678 CLASS="QUOTE"
679 >"advert1.gif"</SPAN
680 > (no leading slash), or
681  <SPAN
682 CLASS="QUOTE"
683 >"/adverts232.jpg"</SPAN
684 > (the expression does not include an
685  <SPAN
686 CLASS="QUOTE"
687 >"s"</SPAN
688 >), or <SPAN
689 CLASS="QUOTE"
690 >"/advert1.jsp"</SPAN
691 > (<SPAN
692 CLASS="QUOTE"
693 >"jsp"</SPAN
694 > is not
695  in the expression anywhere).</P
696 ><P
697 > <I
698 CLASS="EMPHASIS"
699 ><TT
700 CLASS="LITERAL"
701 >s/microsoft(?!.com)/MicroSuck/i</TT
702 ></I
703 > - This is 
704  a substitution. <SPAN
705 CLASS="QUOTE"
706 >"MicroSuck"</SPAN
707 > will replace any occurrence of 
708  <SPAN
709 CLASS="QUOTE"
710 >"microsoft"</SPAN
711 >.  The <SPAN
712 CLASS="QUOTE"
713 >"i"</SPAN
714 > at the end of the expression
715  means ignore case. The <SPAN
716 CLASS="QUOTE"
717 >"(?!.com)"</SPAN
718 > means 
719  the match should fail if <SPAN
720 CLASS="QUOTE"
721 >"microsoft"</SPAN
722 > is followed by
723  <SPAN
724 CLASS="QUOTE"
725 >".com"</SPAN
726 >. In other words, this acts like a <SPAN
727 CLASS="QUOTE"
728 >"NOT"</SPAN
729 >
730  modifier. In case this is a hyperlink, we don't want to break it ;-).</P
731 ><P
732 > We are barely scratching the surface of regular expressions here so that you
733  can understand the default <SPAN
734 CLASS="APPLICATION"
735 >Privoxy</SPAN
736 >
737  configuration files, and maybe use this knowledge to customize your own
738  installation. There is much, much more that can be done with regular
739  expressions. Now that you know enough to get started, you can learn more on
740  your own :/</P
741 ><P
742 > More reading on Perl Compatible Regular expressions: 
743  <A
744 HREF="http://www.perldoc.com/perl5.6/pod/perlre.html"
745 TARGET="_top"
746 >http://www.perldoc.com/perl5.6/pod/perlre.html</A
747 ></P
748 ></DIV
749 ><DIV
750 CLASS="SECT2"
751 ><H2
752 CLASS="SECT2"
753 ><A
754 NAME="AEN2718"
755 >14.2. <SPAN
756 CLASS="APPLICATION"
757 >Privoxy</SPAN
758 >'s Internal Pages</A
759 ></H2
760 ><P
761 > Since <SPAN
762 CLASS="APPLICATION"
763 >Privoxy</SPAN
764 > proxies each requested 
765  web page, it is easy for <SPAN
766 CLASS="APPLICATION"
767 >Privoxy</SPAN
768 > to 
769  trap certain special URLs. In this way, we can talk directly to
770  <SPAN
771 CLASS="APPLICATION"
772 >Privoxy</SPAN
773 >, and see how it is 
774  configured, see how our rules are being applied, change these 
775  rules and other configuration options, and even turn
776  <SPAN
777 CLASS="APPLICATION"
778 >Privoxy's</SPAN
779 > filtering off, all with 
780  a web browser.&#13;</P
781 ><P
782 > The URLs listed below are the special ones that allow direct access 
783  to <SPAN
784 CLASS="APPLICATION"
785 >Privoxy</SPAN
786 >. Of course,
787  <SPAN
788 CLASS="APPLICATION"
789 >Privoxy</SPAN
790 > must be running to access these. If 
791  not, you will get a friendly error message. Internet access is not 
792  necessary either.</P
793 ><P
794 > <P
795 ></P
796 ><UL
797 ><LI
798 ><P
799 >  
800    Privoxy main page: 
801   </P
802 ><A
803 NAME="AEN2733"
804 ></A
805 ><BLOCKQUOTE
806 CLASS="BLOCKQUOTE"
807 ><P
808
809      <A
810 HREF="http://config.privoxy.org/"
811 TARGET="_top"
812 >http://config.privoxy.org/</A
813 >
814    </P
815 ></BLOCKQUOTE
816 ><P
817 >   Alternately, this may be reached at <A
818 HREF="http://p.p/"
819 TARGET="_top"
820 >http://p.p/</A
821 >, but this
822    variation may not work as reliably as the above in some configurations.
823   </P
824 ></LI
825 ><LI
826 ><P
827 >  
828     Show information about the current configuration, including viewing and 
829     editing of actions files:
830   </P
831 ><A
832 NAME="AEN2740"
833 ></A
834 ><BLOCKQUOTE
835 CLASS="BLOCKQUOTE"
836 ><P
837
838     <A
839 HREF="http://config.privoxy.org/show-status"
840 TARGET="_top"
841 >http://config.privoxy.org/show-status</A
842 >
843    </P
844 ></BLOCKQUOTE
845 ></LI
846 ><LI
847 ><P
848 >  
849     Show the source code version numbers:
850   </P
851 ><A
852 NAME="AEN2745"
853 ></A
854 ><BLOCKQUOTE
855 CLASS="BLOCKQUOTE"
856 ><P
857
858     <A
859 HREF="http://config.privoxy.org/show-version"
860 TARGET="_top"
861 >http://config.privoxy.org/show-version</A
862 >
863    </P
864 ></BLOCKQUOTE
865 ></LI
866 ><LI
867 ><P
868 >  
869    Show the browser's request headers:
870   </P
871 ><A
872 NAME="AEN2750"
873 ></A
874 ><BLOCKQUOTE
875 CLASS="BLOCKQUOTE"
876 ><P
877
878     <A
879 HREF="http://config.privoxy.org/show-request"
880 TARGET="_top"
881 >http://config.privoxy.org/show-request</A
882 >
883    </P
884 ></BLOCKQUOTE
885 ></LI
886 ><LI
887 ><P
888 >  
889    Show which actions apply to a URL and why:
890   </P
891 ><A
892 NAME="AEN2755"
893 ></A
894 ><BLOCKQUOTE
895 CLASS="BLOCKQUOTE"
896 ><P
897
898     <A
899 HREF="http://config.privoxy.org/show-url-info"
900 TARGET="_top"
901 >http://config.privoxy.org/show-url-info</A
902 >
903    </P
904 ></BLOCKQUOTE
905 ></LI
906 ><LI
907 ><P
908 >  
909    Toggle Privoxy on or off. In this case, <SPAN
910 CLASS="QUOTE"
911 >"Privoxy"</SPAN
912 > continues 
913    to run, but only as a pass-through proxy, with no actions taking place:
914   </P
915 ><A
916 NAME="AEN2761"
917 ></A
918 ><BLOCKQUOTE
919 CLASS="BLOCKQUOTE"
920 ><P
921
922     <A
923 HREF="http://config.privoxy.org/toggle"
924 TARGET="_top"
925 >http://config.privoxy.org/toggle</A
926 >
927    </P
928 ></BLOCKQUOTE
929 ><P
930 >   Short cuts. Turn off, then on: 
931   </P
932 ><A
933 NAME="AEN2765"
934 ></A
935 ><BLOCKQUOTE
936 CLASS="BLOCKQUOTE"
937 ><P
938
939      <A
940 HREF="http://config.privoxy.org/toggle?set=disable"
941 TARGET="_top"
942 >http://config.privoxy.org/toggle?set=disable</A
943 >
944    </P
945 ></BLOCKQUOTE
946 ><A
947 NAME="AEN2768"
948 ></A
949 ><BLOCKQUOTE
950 CLASS="BLOCKQUOTE"
951 ><P
952
953      <A
954 HREF="http://config.privoxy.org/toggle?set=enable"
955 TARGET="_top"
956 >http://config.privoxy.org/toggle?set=enable</A
957 >
958    </P
959 ></BLOCKQUOTE
960 ></LI
961 ></UL
962 ></P
963 ><P
964 > These may be bookmarked for quick reference. See next.&#13;</P
965 ><DIV
966 CLASS="SECT3"
967 ><H3
968 CLASS="SECT3"
969 ><A
970 NAME="BOOKMARKLETS"
971 >14.2.1. Bookmarklets</A
972 ></H3
973 ><P
974 > Below are some <SPAN
975 CLASS="QUOTE"
976 >"bookmarklets"</SPAN
977 > to allow you to easily access a
978  <SPAN
979 CLASS="QUOTE"
980 >"mini"</SPAN
981 > version of some of <SPAN
982 CLASS="APPLICATION"
983 >Privoxy's</SPAN
984 >
985  special pages. They are designed for MS Internet Explorer, but should work
986  equally well in Netscape, Mozilla, and other browsers which support
987  JavaScript. They are designed to run directly from your bookmarks - not by
988  clicking the links below (although that should work for testing).</P
989 ><P
990 > To save them, right-click the link and choose <SPAN
991 CLASS="QUOTE"
992 >"Add to Favorites"</SPAN
993 >
994  (IE) or <SPAN
995 CLASS="QUOTE"
996 >"Add Bookmark"</SPAN
997 > (Netscape). You will get a warning that
998  the bookmark <SPAN
999 CLASS="QUOTE"
1000 >"may not be safe"</SPAN
1001 > - just click OK. Then you can run the
1002  Bookmarklet directly from your favorites/bookmarks. For even faster access,
1003  you can put them on the <SPAN
1004 CLASS="QUOTE"
1005 >"Links"</SPAN
1006 > bar (IE) or the <SPAN
1007 CLASS="QUOTE"
1008 >"Personal
1009  Toolbar"</SPAN
1010 > (Netscape), and run them with a single click. </P
1011 ><P
1012 > <P
1013 ></P
1014 ><UL
1015 ><LI
1016 ><P
1017 >    <A
1018 HREF="javascript:void(window.open('http://config.privoxy.org/toggle?mini=y&set=enabled','ijbstatus','width=250,height=100,resizable=yes,scrollbars=no,toolbar=no,location=no,directories=no,status=no,menubar=no,copyhistory=no').focus());"
1019 TARGET="_top"
1020 >Privoxy - Enable</A
1021 >
1022    </P
1023 ></LI
1024 ><LI
1025 ><P
1026 >    <A
1027 HREF="javascript:void(window.open('http://config.privoxy.org/toggle?mini=y&set=disabled','ijbstatus','width=250,height=100,resizable=yes,scrollbars=no,toolbar=no,location=no,directories=no,status=no,menubar=no,copyhistory=no').focus());"
1028 TARGET="_top"
1029 >Privoxy - Disable</A
1030 >
1031    </P
1032 ></LI
1033 ><LI
1034 ><P
1035 >    <A
1036 HREF="javascript:void(window.open('http://config.privoxy.org/toggle?mini=y&set=toggle','ijbstatus','width=250,height=100,resizable=yes,scrollbars=no,toolbar=no,location=no,directories=no,status=no,menubar=no,copyhistory=no').focus());"
1037 TARGET="_top"
1038 >Privoxy - Toggle Privoxy</A
1039 > (Toggles between enabled and disabled)
1040    </P
1041 ></LI
1042 ><LI
1043 ><P
1044 >    <A
1045 HREF="javascript:void(window.open('http://config.privoxy.org/toggle?mini=y','ijbstatus','width=250,height=2,resizable=yes,scrollbars=no,toolbar=no,location=no,directories=no,status=no,menubar=no,copyhistory=no').focus());"
1046 TARGET="_top"
1047 >Privoxy- View Status</A
1048 >
1049    </P
1050 ></LI
1051 ><LI
1052 ><P
1053 >    <A
1054 HREF="javascript:w=Math.floor(screen.width/2);h=Math.floor(screen.height*0.9);void(window.open('http://www.privoxy.org/actions','Feedback','screenx='+w+',width='+w+',height='+h+',scrollbars=yes,toolbar=no,location=no,directories=no,status=no,menubar=no,copyhistory=no').focus());"
1055 TARGET="_top"
1056 >Privoxy - Submit Filter Feedback</A
1057 >
1058    </P
1059 ></LI
1060 ></UL
1061 ></P
1062 ><P
1063 > Credit: The site which gave me the general idea for these bookmarklets is
1064  <A
1065 HREF="http://www.bookmarklets.com"
1066 TARGET="_top"
1067 >www.bookmarklets.com</A
1068 >. They
1069  have more information about bookmarklets. </P
1070 ></DIV
1071 ></DIV
1072 ><DIV
1073 CLASS="SECT2"
1074 ><H2
1075 CLASS="SECT2"
1076 ><A
1077 NAME="CHAIN"
1078 >14.3. Chain of Events</A
1079 ></H2
1080 ><P
1081 > Let's take a quick look at the basic sequence of events when a web page is 
1082  requested by your browser and <SPAN
1083 CLASS="APPLICATION"
1084 >Privoxy</SPAN
1085 > is on duty:</P
1086 ><P
1087 > <P
1088 ></P
1089 ><UL
1090 ><LI
1091 ><P
1092 >   First, your web browser requests a web page. The browser knows to send 
1093    the request to <SPAN
1094 CLASS="APPLICATION"
1095 >Privoxy</SPAN
1096 >, which will in turn, 
1097    relay the request to the remote web server after passing the following 
1098    tests: 
1099   </P
1100 ></LI
1101 ><LI
1102 ><P
1103 >   <SPAN
1104 CLASS="APPLICATION"
1105 >Privoxy</SPAN
1106 > traps any request for its own internal CGI 
1107    pages (e.g http://p.p/) and sends the CGI page back to the browser.
1108   </P
1109 ></LI
1110 ><LI
1111 ><P
1112 >   Next, <SPAN
1113 CLASS="APPLICATION"
1114 >Privoxy</SPAN
1115 > checks to see if the URL 
1116    matches any <A
1117 HREF="actions-file.html#BLOCK"
1118 TARGET="_top"
1119 ><SPAN
1120 CLASS="QUOTE"
1121 >"+block"</SPAN
1122 ></A
1123 > patterns. If
1124    so, the URL is then blocked, and the remote web server will not be contacted.
1125    <A
1126 HREF="actions-file.html#HANDLE-AS-IMAGE"
1127 TARGET="_top"
1128 ><SPAN
1129 CLASS="QUOTE"
1130 >"+handle-as-image"</SPAN
1131 ></A
1132
1133    is then checked and if it does not match, an 
1134    HTML <SPAN
1135 CLASS="QUOTE"
1136 >"BLOCKED"</SPAN
1137 > page is sent back. Otherwise, if it does match,
1138    an image is returned. The type of image depends on the setting of <A
1139 HREF="actions-file.html#SET-IMAGE-BLOCKER"
1140 TARGET="_top"
1141 ><SPAN
1142 CLASS="QUOTE"
1143 >"+set-image-blocker"</SPAN
1144 ></A
1145 >
1146    (blank, checkerboard pattern, or an HTTP redirect to an image elsewhere).
1147   </P
1148 ></LI
1149 ><LI
1150 ><P
1151 >   Untrusted URLs are blocked. If URLs are being added to the
1152    <TT
1153 CLASS="FILENAME"
1154 >trust</TT
1155 > file, then that is done.
1156   </P
1157 ></LI
1158 ><LI
1159 ><P
1160 >   If the URL pattern matches the <A
1161 HREF="actions-file.html#FAST-REDIRECTS"
1162 TARGET="_top"
1163 ><SPAN
1164 CLASS="QUOTE"
1165 >"+fast-redirects"</SPAN
1166 ></A
1167 > action,
1168    it is then processed. Unwanted parts of the requested URL are stripped.
1169   </P
1170 ></LI
1171 ><LI
1172 ><P
1173 >   Now the rest of the client browser's request headers are processed. If any
1174    of these match any of the relevant actions (e.g. <A
1175 HREF="actions-file.html#HIDE-USER-AGENT"
1176 TARGET="_top"
1177 ><SPAN
1178 CLASS="QUOTE"
1179 >"+hide-user-agent"</SPAN
1180 ></A
1181 >,
1182    etc.), headers are suppressed or forged as determined by these actions and
1183    their parameters.
1184   </P
1185 ></LI
1186 ><LI
1187 ><P
1188 >   Now the web server starts sending its response back (i.e. typically a web page and related 
1189    data).
1190   </P
1191 ></LI
1192 ><LI
1193 ><P
1194 >   First, the server headers are read and processed to determine, among other
1195    things, the MIME type (document type) and encoding. The headers are then
1196    filtered as deterimed by the 
1197    <A
1198 HREF="actions-file.html#PREVENT-SETTING-COOKIES"
1199 TARGET="_top"
1200 ><SPAN
1201 CLASS="QUOTE"
1202 >"+prevent-setting-cookies"</SPAN
1203 ></A
1204 >,
1205    <A
1206 HREF="actions-file.html#SESSION-COOKIES-ONLY"
1207 TARGET="_top"
1208 ><SPAN
1209 CLASS="QUOTE"
1210 >"+session-cookies-only"</SPAN
1211 ></A
1212 >,
1213    and <A
1214 HREF="actions-file.html#DOWNGRADE-HTTP-VERSION"
1215 TARGET="_top"
1216 ><SPAN
1217 CLASS="QUOTE"
1218 >"+downgrade-http-version"</SPAN
1219 ></A
1220 >
1221    actions.
1222   </P
1223 ></LI
1224 ><LI
1225 ><P
1226 >   If the <A
1227 HREF="actions-file.html#KILL-POPUPS"
1228 TARGET="_top"
1229 ><SPAN
1230 CLASS="QUOTE"
1231 >"+kill-popups"</SPAN
1232 ></A
1233 >
1234    action applies, and it is an HTML or JavaScript document, the popup-code in the
1235    response is filtered on-the-fly as it is received.
1236   </P
1237 ></LI
1238 ><LI
1239 ><P
1240 >   If a <A
1241 HREF="actions-file.html#FILTER"
1242 TARGET="_top"
1243 ><SPAN
1244 CLASS="QUOTE"
1245 >"+filter"</SPAN
1246 ></A
1247 >
1248    or <A
1249 HREF="actions-file.html#DEANIMATE-GIFS"
1250 TARGET="_top"
1251 ><SPAN
1252 CLASS="QUOTE"
1253 >"+deanimate-gifs"</SPAN
1254 ></A
1255 >
1256    action applies (and the document type fits the action), the rest of the page is
1257    read into memory (up to a configurable limit). Then the filter rules (from
1258    <TT
1259 CLASS="FILENAME"
1260 >default.filter</TT
1261 >) are processed against the buffered
1262    content. Filters are applied in the order they are specified in the
1263    <TT
1264 CLASS="FILENAME"
1265 >default.filter</TT
1266 > file. Animated GIFs, if present, are
1267    reduced to either the first or last frame, depending on the action
1268    setting.The entire page, which is now filtered, is then sent by
1269    <SPAN
1270 CLASS="APPLICATION"
1271 >Privoxy</SPAN
1272 > back to your browser. 
1273   </P
1274 ><P
1275 >   If neither <A
1276 HREF="actions-file.html#FILTER"
1277 TARGET="_top"
1278 ><SPAN
1279 CLASS="QUOTE"
1280 >"+filter"</SPAN
1281 ></A
1282 >
1283    or <A
1284 HREF="actions-file.html#DEANIMATE-GIFS"
1285 TARGET="_top"
1286 ><SPAN
1287 CLASS="QUOTE"
1288 >"+deanimate-gifs"</SPAN
1289 ></A
1290 >
1291    matches, then <SPAN
1292 CLASS="APPLICATION"
1293 >Privoxy</SPAN
1294 > passes the raw data through 
1295    to the client browser as it becomes available.
1296   </P
1297 ></LI
1298 ><LI
1299 ><P
1300 >   As the browser receives the now (probably filtered) page content, it 
1301    reads and then requests any URLs that may be embedded within the page
1302    source, e.g. ad images, stylesheets, JavaScript, other HTML documents (e.g.
1303    frames), sounds, etc. For each of these objects, the browser issues a new
1304    request. And each such request is in turn processed as above. Note that a
1305    complex web page may have many such embedded URLs.
1306   </P
1307 ></LI
1308 ></UL
1309 ></P
1310 ></DIV
1311 ><DIV
1312 CLASS="SECT2"
1313 ><H2
1314 CLASS="SECT2"
1315 ><A
1316 NAME="ACTIONSANAT"
1317 >14.4. Anatomy of an Action</A
1318 ></H2
1319 ><P
1320 > The way <SPAN
1321 CLASS="APPLICATION"
1322 >Privoxy</SPAN
1323 > applies 
1324  <A
1325 HREF="actions-file.html#ACTIONS"
1326 TARGET="_top"
1327 ><SPAN
1328 CLASS="QUOTE"
1329 >"actions"</SPAN
1330 ></A
1331 >
1332  and <A
1333 HREF="actions-file.html#FILTER"
1334 TARGET="_top"
1335 ><SPAN
1336 CLASS="QUOTE"
1337 >"filters"</SPAN
1338 ></A
1339 >
1340  to any given URL can be complex, and not always so
1341  easy to understand what is happening. And sometimes we need to be able to
1342  <I
1343 CLASS="EMPHASIS"
1344 >see</I
1345 > just what <SPAN
1346 CLASS="APPLICATION"
1347 >Privoxy</SPAN
1348 > is
1349  doing. Especially, if something <SPAN
1350 CLASS="APPLICATION"
1351 >Privoxy</SPAN
1352 > is doing
1353  is causing us a problem inadvertently. It can be a little daunting to look at
1354  the actions and filters files themselves, since they tend to be filled with
1355  <SPAN
1356 CLASS="QUOTE"
1357 >"regular expressions"</SPAN
1358 > whose consequences are not always 
1359  so obvious. </P
1360 ><P
1361 > One quick test to see if <SPAN
1362 CLASS="APPLICATION"
1363 >Privoxy</SPAN
1364 > is causing a problem 
1365  or not, is to disable it temporarily. This should be the first troubleshooting 
1366  step. See <A
1367 HREF="appendix.html#BOOKMARKLETS"
1368 >the Bookmarklets</A
1369 > section on a quick 
1370  and easy way to do this (be sure to flush caches afterward!).</P
1371 ><P
1372 > <SPAN
1373 CLASS="APPLICATION"
1374 >Privoxy</SPAN
1375 > also provides the 
1376  <A
1377 HREF="http://config.privoxy.org/show-url-info"
1378 TARGET="_top"
1379 >http://config.privoxy.org/show-url-info</A
1380 >
1381  page that can show us very specifically how <SPAN
1382 CLASS="APPLICATION"
1383 >actions</SPAN
1384 >
1385  are being applied to any given URL. This is a big help for troubleshooting.</P
1386 ><P
1387 > First, enter one URL (or partial URL) at the prompt, and then
1388  <SPAN
1389 CLASS="APPLICATION"
1390 >Privoxy</SPAN
1391 > will tell us 
1392  how the current configuration will handle it. This will not
1393  help with filtering effects (i.e. the <A
1394 HREF="actions-file.html#FILTER"
1395 TARGET="_top"
1396 ><SPAN
1397 CLASS="QUOTE"
1398 >"+filter"</SPAN
1399 ></A
1400 > action) from
1401  the <TT
1402 CLASS="FILENAME"
1403 >default.filter</TT
1404 > file since this is handled very
1405  differently and not so easy to trap! It also will not tell you about any other
1406  URLs that may be embedded within the URL you are testing. For instance, images
1407  such as ads are expressed as URLs within the raw page source of HTML pages. So
1408  you will only get info for the actual URL that is pasted into the prompt area
1409  -- not any sub-URLs. If you want to know about embedded URLs like ads, you
1410  will have to dig those out of the HTML source. Use your browser's <SPAN
1411 CLASS="QUOTE"
1412 >"View
1413  Page Source"</SPAN
1414 > option for this. Or right click on the ad, and grab the
1415  URL.</P
1416 ><P
1417 > Let's try an example, <A
1418 HREF="http://google.com"
1419 TARGET="_top"
1420 >google.com</A
1421 >, 
1422  and look at it one section at a time:</P
1423 ><P
1424 > <TABLE
1425 BORDER="0"
1426 BGCOLOR="#E0E0E0"
1427 WIDTH="100%"
1428 ><TR
1429 ><TD
1430 ><PRE
1431 CLASS="SCREEN"
1432 > Matches for http://google.com:
1433
1434 --- File standard ---
1435 (no matches in this file)
1436
1437 --- File default ---
1438
1439 { -add-header -block +deanimate-gifs{last} -downgrade-http-version +fast-redirects 
1440  -filter{popups} -filter{fun} -filter{shockwave-flash} -filter{crude-parental} 
1441  +filter{html-annoyances} +filter{js-annoyances} +filter{content-cookies} 
1442  +filter{webbugs} +filter{refresh-tags} +filter{nimda} +filter{banners-by-size} 
1443  +hide-forwarded-for-headers +hide-from-header{block} +hide-referer{forge} 
1444  -hide-user-agent -handle-as-image +set-image-blocker{pattern} -limit-connect 
1445  +prevent-compression +session-cookies-only -prevent-reading-cookies 
1446  -prevent-setting-cookies -kill-popups -send-vanilla-wafer -send-wafer }
1447 /
1448
1449  { -session-cookies-only }
1450  .google.com
1451
1452  { -fast-redirects }
1453  .google.com
1454
1455 --- File user ---
1456 (no matches in this file)  </PRE
1457 ></TD
1458 ></TR
1459 ></TABLE
1460 ></P
1461 ><P
1462 > This tells us how we have defined our 
1463  <A
1464 HREF="actions-file.html#ACTIONS"
1465 TARGET="_top"
1466 ><SPAN
1467 CLASS="QUOTE"
1468 >"actions"</SPAN
1469 ></A
1470 >, and
1471  which ones match for our example, <SPAN
1472 CLASS="QUOTE"
1473 >"google.com"</SPAN
1474 >. The first listing
1475  is any matches for the <TT
1476 CLASS="FILENAME"
1477 >standard.action</TT
1478 > file. No hits at
1479  all here on <SPAN
1480 CLASS="QUOTE"
1481 >"standard"</SPAN
1482 >. Then next is <SPAN
1483 CLASS="QUOTE"
1484 >"default"</SPAN
1485 >, or
1486  our <TT
1487 CLASS="FILENAME"
1488 >default.action</TT
1489 > file. The large, multi-line listing,
1490  is how the actions are set to match for all URLs, i.e. our default settings.
1491  If you look at your <SPAN
1492 CLASS="QUOTE"
1493 >"actions"</SPAN
1494 > file, this would be the section
1495  just below the <SPAN
1496 CLASS="QUOTE"
1497 >"aliases"</SPAN
1498 > section near the top. This will apply to
1499  all URLs as signified by the single forward slash at the end of the listing
1500  -- <SPAN
1501 CLASS="QUOTE"
1502 >"/"</SPAN
1503 >.</P
1504 ><P
1505 > But we can define additional actions that would be exceptions to these general
1506  rules, and then list specific URLs (or patterns) that these exceptions would
1507  apply to. Last match wins. Just below this then are two explicit matches for
1508  <SPAN
1509 CLASS="QUOTE"
1510 >".google.com"</SPAN
1511 >. The first is negating our previous cookie setting, 
1512  which was for <A
1513 HREF="actions-file.html#SESSION-COOKIES-ONLY"
1514 TARGET="_top"
1515 ><SPAN
1516 CLASS="QUOTE"
1517 >"+session-cookies-only"</SPAN
1518 ></A
1519 >
1520  (i.e. not persistent). So we will allow persistent cookies for google. The
1521  second turns <I
1522 CLASS="EMPHASIS"
1523 >off</I
1524 > any 
1525  <A
1526 HREF="actions-file.html#FAST-REDIRECTS"
1527 TARGET="_top"
1528 ><SPAN
1529 CLASS="QUOTE"
1530 >"+fast-redirects"</SPAN
1531 ></A
1532 >
1533  action, allowing this to take place unmolested. Note that there is a leading
1534  dot here -- <SPAN
1535 CLASS="QUOTE"
1536 >".google.com"</SPAN
1537 >. This will match any hosts and
1538  sub-domains, in the google.com domain also, such as
1539  <SPAN
1540 CLASS="QUOTE"
1541 >"www.google.com"</SPAN
1542 >. So, apparently, we have these two actions
1543  defined somewhere in the lower part of our <TT
1544 CLASS="FILENAME"
1545 >default.action</TT
1546 >
1547  file, and <SPAN
1548 CLASS="QUOTE"
1549 >"google.com"</SPAN
1550 > is referenced somewhere in these latter
1551  sections.</P
1552 ><P
1553 > Then, for our <TT
1554 CLASS="FILENAME"
1555 >user.action</TT
1556 > file, we again have no hits.</P
1557 ><P
1558 > And finally we pull it all together in the bottom section and summarize how
1559  <SPAN
1560 CLASS="APPLICATION"
1561 >Privoxy</SPAN
1562 > is applying all its <SPAN
1563 CLASS="QUOTE"
1564 >"actions"</SPAN
1565
1566  to <SPAN
1567 CLASS="QUOTE"
1568 >"google.com"</SPAN
1569 >:&#13;</P
1570 ><P
1571 > <TABLE
1572 BORDER="0"
1573 BGCOLOR="#E0E0E0"
1574 WIDTH="100%"
1575 ><TR
1576 ><TD
1577 ><PRE
1578 CLASS="SCREEN"
1579 >&#13; Final results:
1580  -add-header -block +deanimate-gifs{last} -downgrade-http-version -fast-redirects 
1581  -filter{popups} -filter{fun} -filter{shockwave-flash} -filter{crude-parental} 
1582  +filter{html-annoyances} +filter{js-annoyances} +filter{content-cookies} 
1583  +filter{webbugs} +filter{refresh-tags} +filter{nimda} +filter{banners-by-size} 
1584  +hide-forwarded-for-headers +hide-from-header{block} +hide-referer{forge} 
1585  -hide-user-agent -handle-as-image +set-image-blocker{pattern} -limit-connect 
1586  +prevent-compression -session-cookies-only -prevent-reading-cookies 
1587  -prevent-setting-cookies -kill-popups -send-vanilla-wafer -send-wafer</PRE
1588 ></TD
1589 ></TR
1590 ></TABLE
1591 ></P
1592 ><P
1593 > Notice the only difference here to the previous listing, is to 
1594  <SPAN
1595 CLASS="QUOTE"
1596 >"fast-redirects"</SPAN
1597 > and <SPAN
1598 CLASS="QUOTE"
1599 >"session-cookies-only"</SPAN
1600 >.</P
1601 ><P
1602 > Now another example, <SPAN
1603 CLASS="QUOTE"
1604 >"ad.doubleclick.net"</SPAN
1605 >:</P
1606 ><P
1607 > <TABLE
1608 BORDER="0"
1609 BGCOLOR="#E0E0E0"
1610 WIDTH="100%"
1611 ><TR
1612 ><TD
1613 ><PRE
1614 CLASS="SCREEN"
1615 >&#13; { +block +handle-as-image }
1616   .ad.doubleclick.net
1617
1618  { +block +handle-as-image }
1619   ad*.
1620
1621  { +block +handle-as-image }
1622   .doubleclick.net</PRE
1623 ></TD
1624 ></TR
1625 ></TABLE
1626 ></P
1627 ><P
1628 > We'll just show the interesting part here, the explicit matches. It is 
1629  matched three different times. Each as an <SPAN
1630 CLASS="QUOTE"
1631 >"+block +handle-as-image"</SPAN
1632 >,
1633  which is the expanded form of one of our aliases that had been defined as: 
1634  <SPAN
1635 CLASS="QUOTE"
1636 >"+imageblock"</SPAN
1637 >. (<A
1638 HREF="actions-file.html#ALIASES"
1639 TARGET="_top"
1640 ><SPAN
1641 CLASS="QUOTE"
1642 >"Aliases"</SPAN
1643 ></A
1644 > are defined in
1645  the first section of the actions file and typically used to combine more 
1646  than one action.)</P
1647 ><P
1648 > Any one of these would have done the trick and blocked this as an unwanted 
1649  image. This is unnecessarily redundant since the last case effectively 
1650  would also cover the first. No point in taking chances with these guys 
1651  though ;-) Note that if you want an ad or obnoxious 
1652  URL to be invisible, it should be defined as <SPAN
1653 CLASS="QUOTE"
1654 >"ad.doubleclick.net"</SPAN
1655 >
1656  is done here -- as both a <A
1657 HREF="actions-file.html#BLOCK"
1658 TARGET="_top"
1659 ><SPAN
1660 CLASS="QUOTE"
1661 >"+block"</SPAN
1662 ></A
1663 >
1664  <I
1665 CLASS="EMPHASIS"
1666 >and</I
1667 > an 
1668  <A
1669 HREF="actions-file.html#HANDLE-AS-IMAGE"
1670 TARGET="_top"
1671 ><SPAN
1672 CLASS="QUOTE"
1673 >"+handle-as-image"</SPAN
1674 ></A
1675 >.
1676  The custom alias <SPAN
1677 CLASS="QUOTE"
1678 >"+imageblock"</SPAN
1679 > just simplifies the process and make 
1680  it more readable.</P
1681 ><P
1682 > One last example. Let's try <SPAN
1683 CLASS="QUOTE"
1684 >"http://www.rhapsodyk.net/adsl/HOWTO/"</SPAN
1685 >.
1686  This one is giving us problems. We are getting a blank page. Hmmm...</P
1687 ><P
1688 > <TABLE
1689 BORDER="0"
1690 BGCOLOR="#E0E0E0"
1691 WIDTH="100%"
1692 ><TR
1693 ><TD
1694 ><PRE
1695 CLASS="SCREEN"
1696 >&#13; Matches for http://www.rhapsodyk.net/adsl/HOWTO/:
1697
1698  { -add-header -block +deanimate-gifs -downgrade-http-version +fast-redirects 
1699    +filter{html-annoyances} +filter{js-annoyances} +filter{kill-popups} 
1700    +filter{webbugs} +filter{nimda} +filter{banners-by-size} +filter{hal} 
1701    +filter{fun} +hide-forwarded-for-headers +hide-from-header{block} 
1702    +hide-referer{forge} -hide-user-agent -handle-as-image +set-image-blocker{blank} 
1703    +prevent-compression +session-cookies-only -prevent-setting-cookies 
1704    -prevent-reading-cookies +kill-popups -send-vanilla-wafer -send-wafer }
1705    /
1706
1707  { +block +handle-as-image }
1708   /ads</PRE
1709 ></TD
1710 ></TR
1711 ></TABLE
1712 ></P
1713 ><P
1714 > Ooops, the <SPAN
1715 CLASS="QUOTE"
1716 >"/adsl/"</SPAN
1717 > is matching <SPAN
1718 CLASS="QUOTE"
1719 >"/ads"</SPAN
1720 >! But 
1721  we did not want this at all! Now we see why we get the blank page. We could
1722  now add a new action below this that explicitly does <I
1723 CLASS="EMPHASIS"
1724 >not</I
1725 >
1726  block (<SPAN
1727 CLASS="QUOTE"
1728 >"{-block}"</SPAN
1729 >) paths with <SPAN
1730 CLASS="QUOTE"
1731 >"adsl"</SPAN
1732 >. There are
1733  various ways to handle such exceptions. Example:</P
1734 ><P
1735 > <TABLE
1736 BORDER="0"
1737 BGCOLOR="#E0E0E0"
1738 WIDTH="100%"
1739 ><TR
1740 ><TD
1741 ><PRE
1742 CLASS="SCREEN"
1743 >&#13; { -block }
1744   /adsl</PRE
1745 ></TD
1746 ></TR
1747 ></TABLE
1748 ></P
1749 ><P
1750 > Now the page displays ;-) Be sure to flush your browser's caches when 
1751  making such changes. Or, try using <TT
1752 CLASS="LITERAL"
1753 >Shift+Reload</TT
1754 >.</P
1755 ><P
1756 > But now what about a situation where we get no explicit matches like 
1757  we did with:</P
1758 ><P
1759 > <TABLE
1760 BORDER="0"
1761 BGCOLOR="#E0E0E0"
1762 WIDTH="100%"
1763 ><TR
1764 ><TD
1765 ><PRE
1766 CLASS="SCREEN"
1767 >&#13; { +block +handle-as-image }
1768  /ads</PRE
1769 ></TD
1770 ></TR
1771 ></TABLE
1772 ></P
1773 ><P
1774 > That actually was very telling and pointed us quickly to where the problem
1775  was. If you don't get this kind of match, then it means one of the default 
1776  rules in the first section is causing the problem. This would require some 
1777  guesswork, and maybe a little trial and error to isolate the offending rule.
1778  One likely cause would be one of the <SPAN
1779 CLASS="QUOTE"
1780 >"{+filter}"</SPAN
1781 > actions. Try 
1782  adding the URL for the site to one of aliases that turn off <SPAN
1783 CLASS="QUOTE"
1784 >"+filter"</SPAN
1785 >:</P
1786 ><P
1787 > <TABLE
1788 BORDER="0"
1789 BGCOLOR="#E0E0E0"
1790 WIDTH="100%"
1791 ><TR
1792 ><TD
1793 ><PRE
1794 CLASS="SCREEN"
1795 >&#13; {shop}
1796  .quietpc.com
1797  .worldpay.com   # for quietpc.com
1798  .jungle.com
1799  .scan.co.uk
1800  .forbes.com</PRE
1801 ></TD
1802 ></TR
1803 ></TABLE
1804 ></P
1805 ><P
1806 > <SPAN
1807 CLASS="QUOTE"
1808 >"{shop}"</SPAN
1809 > is an <SPAN
1810 CLASS="QUOTE"
1811 >"alias"</SPAN
1812 > that expands to 
1813  <SPAN
1814 CLASS="QUOTE"
1815 >"{ -filter -session-cookies-only }"</SPAN
1816 >.
1817  Or you could do your own exception to negate filtering:&#13;</P
1818 ><P
1819 > <TABLE
1820 BORDER="0"
1821 BGCOLOR="#E0E0E0"
1822 WIDTH="100%"
1823 ><TR
1824 ><TD
1825 ><PRE
1826 CLASS="SCREEN"
1827 >&#13; {-filter}
1828  .forbes.com</PRE
1829 ></TD
1830 ></TR
1831 ></TABLE
1832 ></P
1833 ><P
1834 > This would probably be most appropriately put in <TT
1835 CLASS="FILENAME"
1836 >user.action</TT
1837 >, 
1838  for local site exceptions.</P
1839 ><P
1840 > <SPAN
1841 CLASS="QUOTE"
1842 >"{fragile}"</SPAN
1843 > is an alias that disables most actions. This can be 
1844  used as a last resort for problem sites. Remember to flush caches! If this 
1845  still does not work, you will have to go through the remaining actions one by
1846  one to find which one(s) is causing the problem.</P
1847 ></DIV
1848 ></DIV
1849 ><DIV
1850 CLASS="NAVFOOTER"
1851 ><HR
1852 ALIGN="LEFT"
1853 WIDTH="100%"><TABLE
1854 WIDTH="100%"
1855 BORDER="0"
1856 CELLPADDING="0"
1857 CELLSPACING="0"
1858 ><TR
1859 ><TD
1860 WIDTH="33%"
1861 ALIGN="left"
1862 VALIGN="top"
1863 ><A
1864 HREF="seealso.html"
1865 >Prev</A
1866 ></TD
1867 ><TD
1868 WIDTH="34%"
1869 ALIGN="center"
1870 VALIGN="top"
1871 ><A
1872 HREF="index.html"
1873 >Home</A
1874 ></TD
1875 ><TD
1876 WIDTH="33%"
1877 ALIGN="right"
1878 VALIGN="top"
1879 >&nbsp;</TD
1880 ></TR
1881 ><TR
1882 ><TD
1883 WIDTH="33%"
1884 ALIGN="left"
1885 VALIGN="top"
1886 >See Also</TD
1887 ><TD
1888 WIDTH="34%"
1889 ALIGN="center"
1890 VALIGN="top"
1891 >&nbsp;</TD
1892 ><TD
1893 WIDTH="33%"
1894 ALIGN="right"
1895 VALIGN="top"
1896 >&nbsp;</TD
1897 ></TR
1898 ></TABLE
1899 ></DIV
1900 ></BODY
1901 ></HTML
1902 >