<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"><head>
<meta content="text/html; charset=ISO-8859-1" http-equiv="Content-Type" />
<meta content="noindex, nofollow" name="robots" />
<!--
        XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
              This file is generated from xml source: DO NOT EDIT
        XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
      -->
<title>Upgrading to 2.0 from 1.3 - Apache HTTP Server</title>
<link href="./style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
<link href="./style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
<link href="./style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
<link href="./images/favicon.ico" rel="shortcut icon" /><link href="http://httpd.apache.org/docs/current/upgrading.html" rel="canonical" /></head>
<body id="manual-page"><div id="page-header">
<p class="menu"><a href="./mod/">Modules</a> | <a href="./mod/directives.html">Directives</a> | <a href="./faq/">FAQ</a> | <a href="./glossary.html">Glossary</a> | <a href="./sitemap.html">Sitemap</a></p>
<p class="apache">Apache HTTP Server Version 2.0</p>
<img alt="" src="./images/feather.gif" /></div>
<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="./images/left.gif" /></a></div>
<div id="path">
<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP Server</a> &gt; <a href="http://httpd.apache.org/docs/">Documentation</a> &gt; <a href="./">Version 2.0</a></div><div id="page-content"><div class="retired"><h4>Please note</h4>
            <p>This document refers to the <strong>2.0</strong> version of Apache httpd, which <strong>is no longer maintained</strong>. Upgrade, and refer to the current version of httpd instead, documented at:</p>
        <ul><li><a href="http://httpd.apache.org/docs/current/">Current release version of Apache HTTP Server documentation</a></li></ul><p>You may follow <a href="http://httpd.apache.org/docs/current/upgrading.html">this link</a> to go to the current version of this document.</p></div><div id="preamble"><h1>Upgrading to 2.0 from 1.3</h1>
<div class="toplang">
<p><span>Available Languages: </span><a href="./de/upgrading.html" hreflang="de" rel="alternate" title="Deutsch">&nbsp;de&nbsp;</a> |
<a href="./en/upgrading.html" title="English">&nbsp;en&nbsp;</a> |
<a href="./es/upgrading.html" hreflang="es" rel="alternate" title="Espa&#241;ol">&nbsp;es&nbsp;</a> |
<a href="./fr/upgrading.html" hreflang="fr" rel="alternate" title="Fran&#231;ais">&nbsp;fr&nbsp;</a> |
<a href="./ja/upgrading.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
<a href="./ko/upgrading.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a> |
<a href="./ru/upgrading.html" hreflang="ru" rel="alternate" title="Russian">&nbsp;ru&nbsp;</a></p>
</div>

  <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>
</div>
<div id="quickview"><ul id="toc"><li><img alt="" src="./images/down.gif" /> <a href="#compile-time">Compile-Time Configuration Changes</a></li>
<li><img alt="" src="./images/down.gif" /> <a href="#run-time">Run-Time Configuration Changes</a></li>
<li><img alt="" src="./images/down.gif" /> <a href="#misc">Misc Changes</a></li>
<li><img alt="" src="./images/down.gif" /> <a href="#third-party">Third Party Modules</a></li>
</ul><h3>See also</h3><ul class="seealso"><li><a href="new_features_2_0.html">Overview of new features in
Apache 2.0</a></li></ul></div>
<div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
<div class="section">
<h2><a name="compile-time" id="compile-time">Compile-Time Configuration Changes</a></h2>
    

    <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>
  </div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
<div class="section">
<h2><a name="run-time" id="run-time">Run-Time Configuration Changes</a></h2>
    

    <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 <code class="module"><a href="./mod/prefork.html">prefork</a></code> 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 <code class="directive"><a href="./mod/mod_proxy.html#proxy">&lt;Proxy&gt;</a></code> 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 <code class="directive"><a href="./mod/core.html#acceptpathinfo">AcceptPathInfo</a></code> 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 <code class="directive"><a href="./mod/mod_negotiation.html#cachenegotiateddocs">CacheNegotiatedDocs</a></code>
      directive now takes the argument <code>on</code> or
      <code>off</code>. Existing instances of <code class="directive">CacheNegotiatedDocs</code> should be
      replaced with <code>CacheNegotiatedDocs on</code>.</li>

      <li>
        The <code class="directive"><a href="./mod/core.html#errordocument">ErrorDocument</a></code>
        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

        <div class="example"><p><code>
          ErrorDocument 403 "Some Message
        </code></p></div>
        should be replaced with

        <div class="example"><p><code>
          ErrorDocument 403 "Some Message"
        </code></p></div>

        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 class="directive"><a href="./mod/core.html#include">Include</a></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 <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 <code class="directive"><a href="./mod/core.html#include">Include</a></code> 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
      <code class="directive"><a href="./mod/mpm_common.html#listen">Listen</a></code>
      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 <code class="directive"><a href="./mod/core.html#servername">ServerName</a></code>
      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
      <code class="directive"><a href="./mod/mod_log_config.html#customlog">CustomLog</a></code>
      directive of <code class="module"><a href="./mod/mod_log_config.html">mod_log_config</a></code>.</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 <code class="directive"><a href="./mod/mod_autoindex.html#indexoptions">IndexOptions</a></code>
      directive.</li>

      <li>The MultiViews content-negotiation technique provided by
      <code class="module"><a href="./mod/mod_negotiation.html">mod_negotiation</a></code> 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 <code class="directive"><a href="./mod/mod_mime.html#multiviewsmatch">MultiviewsMatch</a></code> directive.</li>

      <li>(<em>since version 2.0.51</em>)
      <p>The functionality of the <code>ErrorHeader</code> directive was
      put together with the <code class="directive"><a href="./mod/mod_headers.html#header">Header</a></code>
      directive, since it was a misnomer. Use</p>

      <div class="example"><p><code>
        Header always set foo bar
      </code></p></div>

      <p>instead to get the desired behaviour.</p></li>
    </ul>
  </div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
<div class="section">
<h2><a name="misc" id="misc">Misc Changes</a></h2>
    

    <ul>
      <li>The module <code class="module"><a href="./mod/mod_auth_digest.html">mod_auth_digest</a></code>, 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 <code class="module"><a href="./mod/mod_file_cache.html">mod_file_cache</a></code>.</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>
  </div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
<div class="section">
<h2><a name="third-party" id="third-party">Third Party Modules</a></h2>
    

    <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>
  </div></div>
<div class="bottomlang">
<p><span>Available Languages: </span><a href="./de/upgrading.html" hreflang="de" rel="alternate" title="Deutsch">&nbsp;de&nbsp;</a> |
<a href="./en/upgrading.html" title="English">&nbsp;en&nbsp;</a> |
<a href="./es/upgrading.html" hreflang="es" rel="alternate" title="Espa&#241;ol">&nbsp;es&nbsp;</a> |
<a href="./fr/upgrading.html" hreflang="fr" rel="alternate" title="Fran&#231;ais">&nbsp;fr&nbsp;</a> |
<a href="./ja/upgrading.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
<a href="./ko/upgrading.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a> |
<a href="./ru/upgrading.html" hreflang="ru" rel="alternate" title="Russian">&nbsp;ru&nbsp;</a></p>
</div><div id="footer">
<p class="apache">Copyright 2013 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
<p class="menu"><a href="./mod/">Modules</a> | <a href="./mod/directives.html">Directives</a> | <a href="./faq/">FAQ</a> | <a href="./glossary.html">Glossary</a> | <a href="./sitemap.html">Sitemap</a></p></div>
</body></html>