<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE manualpage SYSTEM "./style/manualpage.dtd">
<?xml-stylesheet type="text/xsl" href="./style/manual.en.xsl"?>
<manualpage metafile="upgrading.xml.meta">

<title>Upgrading to 2.0 from 1.3</title>

<summary>
  <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.</p>
</summary>
<seealso><a href="new_features_2_0.html">Overview of new features in
Apache 2.0</a></seealso>

  <section id="compile-time">
    <title>Compile-Time Configuration Changes</title>

    <ul>
      <li>Apache now uses an <code>autoconf</code> and
      <code>libtool</code> system for <a
      href="install.html">configuring the build processes</a>.
      Using this system is similar to, but not the same as, using
      the APACI system in Apache 1.3.</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 <a href="mpm.html">Multi-Processing
      Modules</a> (MPMs).</li>
    </ul>
  </section>

  <section id="run-time">
    <title>Run-Time Configuration Changes</title>

    <ul>
      <li>Many directives that were in the core server in Apache
      1.3 are now in the MPMs. If you wish the behavior of the
      server to be as similar as possible to the behavior of Apache
      1.3, you should select the <module>prefork</module> MPM. Other MPMs
      will have different directives to control process creation and request
      processing.</li>

      <li>The <a href="mod/mod_proxy.html">proxy module</a> has been
      revamped to bring it up to HTTP/1.1.  Among the important changes,
      proxy access control is now placed inside a <directive type="section"
      module="mod_proxy">Proxy</directive> block rather than a
      <code>&lt;Directory proxy:&gt;</code> block.</li>

      <li>The handling of <code>PATH_INFO</code> (trailing path information
      after the true filename) has changed for some modules.  Modules
      that were previously implemented as a handler but are now
      implemented as a filter may no longer accept requests with
      <code>PATH_INFO</code>.  Filters such as <a
      href="mod/mod_include.html">INCLUDES</a> or <a
      href="http://www.php.net/">PHP</a> are implemented on top
      of the core handler, and therefore reject requests with
      <code>PATH_INFO</code>.  You can use the <directive
      module="core">AcceptPathInfo</directive> directive to
      force the core handler to accept requests with <code>PATH_INFO</code>
      and thereby restore the ability to use <code>PATH_INFO</code> in
      server-side includes.</li>

      <li>The <directive
      module="mod_negotiation">CacheNegotiatedDocs</directive>
      directive now takes the argument <code>on</code> or
      <code>off</code>. Existing instances of <directive
      >CacheNegotiatedDocs</directive> should be
      replaced with <code>CacheNegotiatedDocs on</code>.</li>

      <li>
        The <directive module="core">ErrorDocument</directive>
        directive no longer uses a 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

        <example>
          ErrorDocument 403 "Some Message
        </example>
        should be replaced with

        <example>
          ErrorDocument 403 "Some Message"
        </example>

        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 <directive module="core">Include</directive>
      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 <code>httpd.conf</code>. In order to
      assure that Apache reads the configuration files in the same order
      as was implied by the older directives, the <directive
      module="core">Include</directive> directives should be placed at the end
      of <code>httpd.conf</code>, with the one for <code>srm.conf</code>
      preceding the one for <code>access.conf</code>.</li>

      <li>The <code>BindAddress</code> and <code>Port</code>
      directives no longer exist.  Equivalent functionality is
      provided with the more flexible
      <directive module="mpm_common">Listen</directive>
      directive.</li>

      <li>Another use of the <code>Port</code>
      directive in Apache-1.3 was setting the port number to be used
      in self-referential URL's. The Apache-2.0 equivalent is
      the new <directive module="core">ServerName</directive>
      syntax: it has been changed to allow specifying both the
      hostname <em>and</em> the port number for self-referential URL's
      in one directive.</li>

      <li>The <code>ServerType</code> directive no longer exists.
      The method used to serve requests is now determined by the
      selection of MPM. There is currently no MPM designed to be
      launched by inetd.</li>

      <li>The <code>mod_log_agent</code> and <code>mod_log_referer</code>
      modules which provided the <code>AgentLog</code>,
      <code>RefererLog</code> and <code>RefererIgnore</code> directives have
      been removed. Agent and referer logs are still available using the
      <directive module="mod_log_config">CustomLog</directive>
      directive of <module>mod_log_config</module>.</li>

      <li>The <code>AddModule</code> and
      <code>ClearModuleList</code> directives no longer exist.
      These directives were used to ensure that modules could be
      enabled in the correct order. The new Apache 2.0 API allows
      modules to explicitly specify their ordering, eliminating the
      need for these directives.</li>

      <li>The <code>FancyIndexing</code> directive has been removed.
      The same functionality is available through the
      <code>FancyIndexing</code> option to the <directive
      module="mod_autoindex">IndexOptions</directive>
      directive.</li>

      <li>The MultiViews content-negotiation technique provided by
      <module>mod_negotiation</module> has become more strict in its
      default file matching.  It will select only from <em>negotiable</em>
      files.  The old behavior can be restored using the <directive
      module="mod_mime">MultiviewsMatch</directive> directive.</li>

    </ul>
  </section>

  <section id="misc">
    <title>Misc Changes</title>

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

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

      <li>The distribution has been completely reorganized so that
      it no longer contains an independent <code>src</code>
      directory. Instead, the sources are logically organized under
      the main distribution directory, and installations of the
      compiled server should be directed to a separate
      directory.</li>
    </ul>
  </section>

  <section id="third-party">
    <title>Third Party Modules</title>

    <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 are provided in the <a href="developer/">developer
    documentation</a>.</p>
  </section>
</manualpage>
