README for Apache 2.0 Example Module
[April, 1997, updated May 2000]

The files in the src/modules/example directory under the Apache
distribution directory tree are provided as an example to those that
wish to write modules that use the Apache API.

The main file is mod_example.c, which illustrates all the different
callback mechanisms and call syntaces.  By no means does an add-on
module need to include routines for all of the callbacks - quite the
contrary!

The example module is an actual working module.  If you link it into
your server, enable the "example-handler" handler for a location, and then
browse to that location, you will see a display of some of the tracing
the example module did as the various callbacks were made.

To include the example module in your server add --enable-example to the
other ./configure arguments executed from the httpd-2.1 directory. After
that run 'make'.

To add another module of your own:

    A. cp modules/experimental/mod_example.c modules/experimental/mod_myexample.c
    B. Modify the file
    C. Build the server with --enable--myexample

To activate the example module, include a block similar to the
following in your httpd.conf file:

    <Location /example-info>
	SetHandler example-handler
    </Location>

As an alternative, you can put the following into a .htaccess file and
then request the file "test.example" from that location:

    AddHandler example-handler .example

After reloading/restarting your server, you should be able to browse
to this location and see the brief display mentioned earlier.
