<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
<HTML><HEAD>
<TITLE>Upgrading to 2.0 from 1.3</TITLE>
</HEAD>

<!-- Background white, links blue (unvisited), navy (visited), red (active) -->
<BODY
 BGCOLOR="#FFFFFF"
 TEXT="#000000"
 LINK="#0000FF"
 VLINK="#000080"
 ALINK="#FF0000"
>
<!--#include virtual="header.html" -->
<H1 ALIGN="CENTER">Upgrading to 2.0 from 1.3</H1>

<P>In order to assist folks upgrading, we maintain a document
describing information critical to existing Apache users.  These are
intended to be brief notes, and you should be able to find more
information in either the <A HREF="new_features_2_0.html">New
Features</A> document, or in the <CODE>src/CHANGES</CODE> file.

<H3>Compile-Time Configuration Changes</H3>

<UL>
<LI>Apache now uses an <code>autoconf</code> and <code>libtool</code>
system for configuring the build processes.  Using this system
is similar to, but not the same as, using the APACI system in
Apache 1.3.  Further documentation to follow.</li>

<li>In addition to the usual selection of modules which you can
choose to compile, Apache 2.0 has moved the main part of request
processing into Multi-Processing-Modules (MPMs).  Documentation
on how to select an MPM is to follow.</li>
</UL>

<H3>Run-Time Configuration Changes</H3>

<UL>
<li>The <code>CacheNegotiatedDocs</code> directive now takes
the argument <code>on</code> or <code>off</code>.  Existing
instances of <code>CacheNegotiatedDocs</code> should be replaced
with <code>CachNegotiatedDocs on</code>.</li>

<li>The <code>ErrorDocument</code> directive no longer uses a single
quote at the beginning of the argument to indicate a text message.
Instead, you should enclose the message in double quotes.  For
example, existing instances of <code>ErrorDocument 403 "Some
Message</code> should be replaced with <code>ErrorDocument 403 "Some
Message"</code>.  As long as the second argument is not a valid URL or
pathname, it will be treated as a text message.</li>

<li>The <code>AccessConfig</code> and <code>ResourceConfig</code>
directives no longer exist.  Existing instances of these directives
can be replaced with the <code>Include</code> directive which
has equivalent functionality.  If you were making use of the 
default values of these directives without including them in
the configuration files, you may need to add
<code>Include conf/access.conf</code> and <code>Include conf/srm.conf</code>
to your httpd.conf.</li>

<li>The <code>ExtendedStatus</code> directive no longer exists.</li>

<li>The <code>ServerType</code> directive no longer exists.</li>

<li>The <code>CoreDumpDirectory</code> directive no longer exists.</li>

<li>Many directives that were in the core server in Apache 1.3
are now in the MPMs.</li>


</UL>

<H3>Misc Changes</H3>

<UL>
<li>The module mod_auth_digest, which was experimental in Apache 1.3
is now a standard module.</li>

<li>The mod_mmap_static module, which was experimental in Apache 1.3
has been replaced with mod_file_cache.</li>


</UL>

<H3>Third Party Modules</H3>

<p>Extensive changes were made to the server API in Apache 2.0.
Existing modules designed for the Apache 1.3 API will <strong>not</strong>
work in Apache 2.0 without modification.  Details to follow.

<!--#include virtual="footer.html" -->
</BODY>
</HTML>
