<!--#if expr="!$ONEPAGE" -->
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
  <head>
    <meta name="generator" content="HTML Tidy, see www.w3.org" />

    <title>Support - Apache Server Frequently Asked
    Questions</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">Frequently Asked Questions</h1>
    <!--#endif -->

    <h2><a id="support.html" name="support.html">Support</a></h2>

    <ul>
      <li><a href="#what2do">"Why can't I ...? Why won't ... work?"
      What to do in case of problems</a></li>

      <li><a href="#support">Whom do I contact for
      support?</a></li>
    </ul>
    <hr />

    <h3><a id="what2do" name="what2do">"Why can't I ...? Why won't
    ... work?" What to do in case of problems</a></h3>

    <p>If you are having trouble with your Apache server software,
    you should take the following steps:</p>

    <ol>
      <li>
        <strong>Check the errorlog!</strong> 

        <p>Apache tries to be helpful when it encounters a problem.
        In many cases, it will provide some details by writing one
        or messages to the server error log. Sometimes this is
        enough for you to diagnose &amp; fix the problem yourself
        (such as file permissions or the like). The default
        location of the error log is
        <samp>/usr/local/apache2/logs/error_log</samp>, but see the
        <a
        href="../mod/core.html#errorlog"><samp>ErrorLog</samp></a>
        directive in your config files for the location on your
        server.</p>
      </li>

      <li>
        <strong>Check the <a
        href="http://httpd.apache.org/docs-2.0/faq/">FAQ</a>!</strong>
        

        <p>The latest version of the Apache Frequently-Asked
        Questions list can always be found at the main Apache web
        site.</p>
      </li>

      <li>
        <strong>Check the Apache bug database</strong> 

        <p>Most problems that get reported to The Apache Group are
        recorded in the <a href="http://bugs.apache.org/">bug
        database</a>. <em><strong>Please</strong> check the
        existing reports, open <strong>and</strong> closed, before
        adding one.</em> If you find that your issue has already
        been reported, please <em>don't</em> add a "me, too"
        report. If the original report isn't closed yet, we suggest
        that you check it periodically. You might also consider
        contacting the original submitter, because there may be an
        email exchange going on about the issue that isn't getting
        recorded in the database.</p>
      </li>

      <li>
        <strong><a id="user-support" name="user-support">Ask in a
        user support forum</a></strong> 

        <p>Apache has an active community of users who are willing
        to share their knowledge. Participating in this community
        is usually the best and fastest way to get answers to your
        questions and problems.</p>

        <p><a href="http://httpd.apache.org/userslist.html">Users
        mailing list</a></p>

        <p>USENET newsgroups:</p>

        <ul>
          <li>comp.infosystems.www.servers.unix [<a
          href="news:comp.infosystems.www.servers.unix">nntp</a>] [
          <a
          href="http://groups.google.com/groups?group=comp.infosystems.www.servers.unix">
          google</a>]</li>

          <li>comp.infosystems.www.servers.ms-windows [<a
          href="news:comp.infosystems.www.servers.ms-windows">nntp</a>]
          [ <a
          href="http://groups.google.com/groups?group=comp.infosystems.www.servers.ms-windows">
          google</a>]</li>

          <li>comp.infosystems.www.authoring.cgi [<a
          href="news:comp.infosystems.www.authoring.cgi">news</a>]
          [ <a
          href="http://groups.google.com/groups?group=comp.infosystems.www.authoring.cgi">
          google</a>]</li>
        </ul>

      <li>
        <strong>If all else fails, report the problem in the bug
        database</strong> 

        <p>If you've gone through those steps above that are
        appropriate and have obtained no relief, then please
        <em>do</em> let The Apache Group know about the problem by
        <a href="http://httpd.apache.org/bug_report.html">logging a
        bug report</a>.</p>

        <p>If your problem involves the server crashing and
        generating a core dump, please include a backtrace (if
        possible). As an example,</p>

        <dl>
          <dd><code># cd <em>ServerRoot</em><br />
           # dbx httpd core<br />
           (dbx) where</code></dd>
        </dl>

        <p>(Substitute the appropriate locations for your
        <samp>ServerRoot</samp> and your <samp>httpd</samp> and
        <samp>core</samp> files. You may have to use
        <code>gdb</code> instead of <code>dbx</code>.)</p>
      </li>
    </ol>
    <hr />

    <h3><a id="support" name="support">Whom do I contact for
    support?</a></h3>

    <p>With several million users and fewer than forty volunteer
    developers, we cannot provide personal support for Apache. For
    free support, we suggest participating in a <a
    href="#user-support">user forum</a>.</p>

    <p>Professional, commercial support for Apache is available
    from <a href="http://www.apache.org/info/support.cgi">a number
    of companies</a>.</p>
    <!--#if expr="!$ONEPAGE" -->
    <!--#include virtual="footer.html" -->
    <!--#endif -->
  </body>
</html>

