<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="../style/manual.xsl"?>
<modulesynopsis>

<name>mod_speling</name>
<status>Extension</status>
<identifier>speling_module</identifier>
<sourcefile>mod_speling.c</sourcefile>
<compatibility>Available in Apache 1.3 and later. Available as
an External module in Apache 1.1 and later.</compatibility>

<description>This module attempts to correct misspellings of URLs that
users might have entered, by ignoring capitalization and by
allowing up to one misspelling.</description>

<summary>

    <p>Requests to documents sometimes cannot be served by the core
    apache server because the request was misspelled or
    miscapitalized. This module addresses this problem by trying to
    find a matching document, even after all other modules gave up.
    It does its work by comparing each document name in the
    requested directory against the requested document name
    <strong>without regard to case</strong>, and allowing
    <strong>up to one misspelling</strong> (character insertion /
    omission / transposition or wrong character). A list is built
    with all document names which were matched using this
    strategy.</p>

    <p>If, after scanning the directory,</p>

    <ul>
      <li>no matching document was found, Apache will proceed as
      usual and return a "document not found" error.</li>

      <li>only one document is found that "almost" matches the
      request, then it is returned in the form of a redirection
      response.</li>

      <li>more than one document with a close match was found, then
      the list of the matches is returned to the client, and the
      client can select the correct candidate.</li>
    </ul>

</summary>


<directivesynopsis>
<name>CheckSpelling</name>
<syntax>CheckSpelling on|off</syntax>
<default>CheckSpelling Off</default>
<contextlist>
<context>server config</context>
<context>virtual host</context>
<context>directory</context>
<context>.htaccess</context>
</contextlist>
<override>Options</override>
<compatibility>CheckSpelling was available as a separately available
module for Apache 1.1, but was limited to miscapitalizations. As
of Apache 1.3, it is part of the Apache distribution. Prior to Apache
1.3.2, the <samp>CheckSpelling</samp> directive was only available in the
"server" and "virtual host" contexts.</compatibility>
<description>This directive enables or disables the spelling 
module.</description>

<usage>

    <p>This directive enables or disables the spelling module. When
    enabled, keep in mind that</p>

    <ul>
      <li>the directory scan which is necessary for the spelling
      correction will have an impact on the server's performance
      when many spelling corrections have to be performed at the
      same time.</li>

      <li>the document trees should not contain sensitive files
      which could be matched inadvertently by a spelling
      "correction".</li>

      <li>the module is unable to correct misspelled user names (as
      in <code>http://my.host/~apahce/</code>), just file names or
      directory names.</li>

      <li>spelling corrections apply strictly to existing files, so
      a request for the <samp>&lt;Location /status&gt;</samp> may
      get incorrectly treated as the negotiated file
      "<samp>/stats.html</samp>".</li>
    </ul>
</usage>

</directivesynopsis>

</modulesynopsis>

