<?xml version="1.0" encoding="UTF-8"?>
<!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=UTF-8" http-equiv="Content-Type" />
<!--
        XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
              This file is generated from xml source: DO NOT EDIT
        XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
      -->
<title>Configuration Files - Apache HTTP Server Version 2.5</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 rel="stylesheet" type="text/css" href="./style/css/prettify.css" />
<script src="./style/scripts/prettify.min.js" type="text/javascript">
</script>

<link href="./images/favicon.ico" rel="shortcut icon" /></head>
<body id="manual-page"><div id="page-header">
<p class="menu"><a href="./mod/">Modules</a> | <a href="./mod/quickreference.html">Directives</a> | <a href="http://wiki.apache.org/httpd/FAQ">FAQ</a> | <a href="./glossary.html">Glossary</a> | <a href="./sitemap.html">Sitemap</a></p>
<p class="apache">Apache HTTP Server Version 2.5</p>
<img alt="" src="./images/feather.png" /></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.5</a></div><div id="page-content"><div id="preamble"><h1>Configuration Files</h1>
<div class="toplang">
<p><span>Available Languages: </span><a href="./de/configuring.html" hreflang="de" rel="alternate" title="Deutsch">&nbsp;de&nbsp;</a> |
<a href="./en/configuring.html" title="English">&nbsp;en&nbsp;</a> |
<a href="./fr/configuring.html" hreflang="fr" rel="alternate" title="Français">&nbsp;fr&nbsp;</a> |
<a href="./ja/configuring.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
<a href="./ko/configuring.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a> |
<a href="./tr/configuring.html" hreflang="tr" rel="alternate" title="Türkçe">&nbsp;tr&nbsp;</a></p>
</div>

<p>This document describes the files used to configure Apache HTTP
Server.</p>
</div>
<div id="quickview"><ul id="toc"><li><img alt="" src="./images/down.gif" /> <a href="#main">Main Configuration Files</a></li>
<li><img alt="" src="./images/down.gif" /> <a href="#syntax">Syntax of the Configuration Files</a></li>
<li><img alt="" src="./images/down.gif" /> <a href="#modules">Modules</a></li>
<li><img alt="" src="./images/down.gif" /> <a href="#scope">Scope of Directives</a></li>
<li><img alt="" src="./images/down.gif" /> <a href="#htaccess">.htaccess Files</a></li>
</ul><h3>See also</h3><ul class="seealso"><li><a href="#comments_section">Comments</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="main" id="main">Main Configuration Files</a> <a title="Permanent link" href="#main" class="permalink">&para;</a></h2>
    
    <table class="related"><tr><th>Related Modules</th><th>Related Directives</th></tr><tr><td><ul><li><code class="module"><a href="./mod/mod_mime.html">mod_mime</a></code></li></ul></td><td><ul><li><code class="directive"><a href="./mod/core.html#ifdefine">&lt;IfDefine&gt;</a></code></li><li><code class="directive"><a href="./mod/core.html#include">Include</a></code></li><li><code class="directive"><a href="./mod/mod_mime.html#typesconfig">TypesConfig</a></code></li></ul></td></tr></table>

    <p>Apache HTTP Server is configured by placing <a href="mod/directives.html">directives</a> in plain text
    configuration files. The main configuration file is usually called
    <code>httpd.conf</code>. The location of this file is set at
    compile-time, but may be overridden with the <code>-f</code>
    command line flag. In addition, other configuration files may be
    added using the <code class="directive"><a href="./mod/core.html#include">Include</a></code>
    directive, and wildcards can be used to include many configuration
    files. Any directive may be placed in any of these configuration
    files. Changes to the main configuration files are only
    recognized by httpd when it is started or restarted.</p>

    <p>The server also reads a file containing mime document types;
    the filename is set by the <code class="directive"><a href="./mod/mod_mime.html#typesconfig">TypesConfig</a></code> directive,
    and is <code>mime.types</code> by default.</p>
  </div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
<div class="section">
<h2><a name="syntax" id="syntax">Syntax of the Configuration Files</a> <a title="Permanent link" href="#syntax" class="permalink">&para;</a></h2>
    

    <p>httpd configuration files contain one directive per line.
    The backslash "\" may be used as the last character on a line
    to indicate that the directive continues onto the next line.
    There must be no other characters or white space between the
    backslash and the end of the line.</p>

    <p>Arguments to directives are separated by whitespace. If an
    argument contains spaces, you must enclose that argument in quotes.</p>

    <p>Directives in the configuration files are case-insensitive,
    but arguments to directives are often case sensitive. Lines
    that begin with the hash character "#" are considered
    comments, and are ignored. Comments may <strong>not</strong> be
    included on the same line as a configuration directive.
    White space occurring before a directive is ignored, so
    you may indent directives for clarity. Blank lines are also ignored.</p>

    <p>The values of variables defined with the <code class="directive"><a href="./mod/core.html#define">Define</a></code> or of shell environment variables can
    be used in configuration file lines using the syntax
    <code>${VAR}</code>.<br />
    If "VAR" is the name of a valid variable, the value of that variable is
    substituted into that spot in the configuration file line, and processing
    continues as if that text were found directly in the configuration
    file.<br />
    Variables defined with <code class="directive"><a href="./mod/core.html#define">Define</a></code> take
    precedence over shell environment variables.<br />
    If the "VAR" variable is not defined, the characters <code>${VAR}</code>
    are left unchanged, and a warning is logged. If instead a default value
    should be substituted, the conditional form
    <code>${VAR?=some default value}</code> can be used. Note that a
    <strong>defined</strong> empty variable will <strong>not</strong> be
    substituted with the default value, and that an empty default value like
    in <code>${VAR?=}</code> is a valid substitution (which produces an empty
    value if "VAR" is not defined, but no warning).<br />
    Variable names may not contain colon ":" characters, to avoid clashes with
    <code class="directive"><a href="./mod/mod_rewrite.html#rewritemap">RewriteMap</a></code>'s syntax.</p>

    <p>Only shell environment variables defined before the server is started
    can be used in expansions. Environment variables defined in the
    configuration file itself, for example with <code class="directive"><a href="./mod/mod_env.html#setenv">SetEnv</a></code>, take effect too late to be used for
    expansions in the configuration file.</p>

    <p>The maximum length of a line in normal configuration files, after
    variable substitution and joining any continued lines, is approximately
    16 MiB. In <a href="configuring.html#htaccess">.htaccess files</a>, the
    maximum length is 8190 characters.</p>

    <p>You can check your configuration files for syntax errors
    without starting the server by using <code>apachectl
    configtest</code> or the <code>-t</code> command line
    option.</p>

    <p>You can use <code class="module"><a href="./mod/mod_info.html">mod_info</a></code>'s <code>-DDUMP_CONFIG</code> to
    dump the configuration with all included files and environment
    variables resolved and all comments and non-matching
    <code class="directive"><a href="./mod/core.html#ifdefine">&lt;IfDefine&gt;</a></code> and
    <code class="directive"><a href="./mod/core.html#ifmodule">&lt;IfModule&gt;</a></code> sections
    removed. However, the output does not reflect the merging or overriding
    that may happen for repeated directives.</p>
  </div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
<div class="section">
<h2><a name="modules" id="modules">Modules</a> <a title="Permanent link" href="#modules" class="permalink">&para;</a></h2>
    

    <table class="related"><tr><th>Related Modules</th><th>Related Directives</th></tr><tr><td><ul><li><code class="module"><a href="./mod/mod_so.html">mod_so</a></code></li></ul></td><td><ul><li><code class="directive"><a href="./mod/core.html#ifmodule">&lt;IfModule&gt;</a></code></li><li><code class="directive"><a href="./mod/mod_so.html#loadmodule">LoadModule</a></code></li></ul></td></tr></table>

    <p>httpd is a modular server. This implies that only the most
    basic functionality is included in the core server. Extended
    features are available through <a href="mod/">modules</a> which can be loaded
    into httpd. By default, a <a href="mod/module-dict.html#Status">base</a> set of modules is
    included in the server at compile-time. If the server is
    compiled to use <a href="dso.html">dynamically loaded</a>
    modules, then modules can be compiled separately and added at
    any time using the <code class="directive"><a href="./mod/mod_so.html#loadmodule">LoadModule</a></code>
    directive.
    Otherwise, httpd must be recompiled to add or remove modules.
    Configuration directives may be included conditional on a
    presence of a particular module by enclosing them in an <code class="directive"><a href="./mod/core.html#ifmodule">&lt;IfModule&gt;</a></code> block. However,
    <code class="directive">&lt;IfModule&gt;</code> blocks are not
    required, and in some cases may mask the fact that you're missing an
    important module.</p>

    <p>To see which modules are currently compiled into the server,
    you can use the <code>-l</code> command line option. You can also
    see what modules are loaded dynamically using the <code>-M</code>
    command line option.</p>
  </div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
<div class="section">
<h2><a name="scope" id="scope">Scope of Directives</a> <a title="Permanent link" href="#scope" class="permalink">&para;</a></h2>
    

    <table class="related"><tr><th>Related Modules</th><th>Related Directives</th></tr><tr><td /><td><ul><li><code class="directive"><a href="./mod/core.html#directory">&lt;Directory&gt;</a></code></li><li><code class="directive"><a href="./mod/core.html#directorymatch">&lt;DirectoryMatch&gt;</a></code></li><li><code class="directive"><a href="./mod/core.html#files">&lt;Files&gt;</a></code></li><li><code class="directive"><a href="./mod/core.html#filesmatch">&lt;FilesMatch&gt;</a></code></li><li><code class="directive"><a href="./mod/core.html#location">&lt;Location&gt;</a></code></li><li><code class="directive"><a href="./mod/core.html#locationmatch">&lt;LocationMatch&gt;</a></code></li><li><code class="directive"><a href="./mod/core.html#virtualhost">&lt;VirtualHost&gt;</a></code></li></ul></td></tr></table>

    <p>Directives placed in the main configuration files apply to
    the entire server. If you wish to change the configuration for
    only a part of the server, you can scope your directives by
    placing them in <code class="directive"><a href="./mod/core.html#directory">&lt;Directory&gt;</a></code>, <code class="directive"><a href="./mod/core.html#directorymatch">&lt;DirectoryMatch&gt;</a></code>, <code class="directive"><a href="./mod/core.html#files">&lt;Files&gt;</a></code>, <code class="directive"><a href="./mod/core.html#filesmatch">&lt;FilesMatch&gt;</a></code>, <code class="directive"><a href="./mod/core.html#location">&lt;Location&gt;</a></code>, and <code class="directive"><a href="./mod/core.html#locationmatch">&lt;LocationMatch&gt;</a></code>
    sections. These sections limit the application of the
    directives which they enclose to particular filesystem
    locations or URLs. They can also be nested, allowing for very
    fine grained configuration.</p>

    <p>httpd has the capability to serve many different websites
    simultaneously. This is called <a href="vhosts/">Virtual
    Hosting</a>. Directives can also be scoped by placing them
    inside <code class="directive"><a href="./mod/core.html#virtualhost">&lt;VirtualHost&gt;</a></code>
    sections, so that they will only apply to requests for a
    particular website.</p>

    <p>Although most directives can be placed in any of these
    sections, some directives do not make sense in some contexts.
    For example, directives controlling process creation can only
    be placed in the main server context. To find which directives
    can be placed in which sections, check the <a href="mod/directive-dict.html#Context">Context</a> of the
    directive. For further information, we provide details on <a href="sections.html">How Directory, Location and Files sections
    work</a>.</p>
  </div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
<div class="section">
<h2><a name="htaccess" id="htaccess">.htaccess Files</a> <a title="Permanent link" href="#htaccess" class="permalink">&para;</a></h2>
    

    <table class="related"><tr><th>Related Modules</th><th>Related Directives</th></tr><tr><td /><td><ul><li><code class="directive"><a href="./mod/core.html#accessfilename">AccessFileName</a></code></li><li><code class="directive"><a href="./mod/core.html#allowoverride">AllowOverride</a></code></li></ul></td></tr></table>

    <p>httpd allows for decentralized management of configuration
    via special files placed inside the web tree. The special files
    are usually called <code>.htaccess</code>, but any name can be
    specified in the <code class="directive"><a href="./mod/core.html#accessfilename">AccessFileName</a></code>
    directive. Directives placed in <code>.htaccess</code> files
    apply to the directory where you place the file, and all
    sub-directories. The <code>.htaccess</code> files follow the
    same syntax as the main configuration files. Since
    <code>.htaccess</code> files are read on every request, changes
    made in these files take immediate effect.</p>

    <p>To find which directives can be placed in
    <code>.htaccess</code> files, check the <a href="mod/directive-dict.html#Context">Context</a> of the
    directive. The server administrator further controls what
    directives may be placed in <code>.htaccess</code> files by
    configuring the <code class="directive"><a href="./mod/core.html#allowoverride">AllowOverride</a></code>
    directive in the main configuration files.</p>

    <p>For more information on <code>.htaccess</code> files, see
    the <a href="howto/htaccess.html">.htaccess tutorial</a>.</p>
  </div></div>
<div class="bottomlang">
<p><span>Available Languages: </span><a href="./de/configuring.html" hreflang="de" rel="alternate" title="Deutsch">&nbsp;de&nbsp;</a> |
<a href="./en/configuring.html" title="English">&nbsp;en&nbsp;</a> |
<a href="./fr/configuring.html" hreflang="fr" rel="alternate" title="Français">&nbsp;fr&nbsp;</a> |
<a href="./ja/configuring.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
<a href="./ko/configuring.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a> |
<a href="./tr/configuring.html" hreflang="tr" rel="alternate" title="Türkçe">&nbsp;tr&nbsp;</a></p>
</div><div class="top"><a href="#page-header"><img src="./images/up.gif" alt="top" /></a></div><div class="section"><h2><a id="comments_section" name="comments_section">Comments</a></h2><div class="warning"><strong>Notice:</strong><br />This is not a Q&amp;A section. Comments placed here should be pointed towards suggestions on improving the documentation or server, and may be removed by our moderators if they are either implemented or considered invalid/off-topic. Questions on how to manage the Apache HTTP Server should be directed at either our IRC channel, #httpd, on Libera.chat, or sent to our <a href="https://httpd.apache.org/lists.html">mailing lists</a>.</div>
<script type="text/javascript"><!--//--><![CDATA[//><!--
var comments_shortname = 'httpd';
var comments_identifier = 'http://httpd.apache.org/docs/trunk/configuring.html';
(function(w, d) {
    if (w.location.hostname.toLowerCase() == "httpd.apache.org") {
        d.write('<div id="comments_thread"><\/div>');
        var s = d.createElement('script');
        s.type = 'text/javascript';
        s.async = true;
        s.src = 'https://comments.apache.org/show_comments.lua?site=' + comments_shortname + '&page=' + comments_identifier;
        (d.getElementsByTagName('head')[0] || d.getElementsByTagName('body')[0]).appendChild(s);
    }
    else {
        d.write('<div id="comments_thread">Comments are disabled for this page at the moment.<\/div>');
    }
})(window, document);
//--><!]]></script></div><div id="footer">
<p class="apache">Copyright 2023 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/quickreference.html">Directives</a> | <a href="http://wiki.apache.org/httpd/FAQ">FAQ</a> | <a href="./glossary.html">Glossary</a> | <a href="./sitemap.html">Sitemap</a></p></div><script type="text/javascript"><!--//--><![CDATA[//><!--
if (typeof(prettyPrint) !== 'undefined') {
    prettyPrint();
}
//--><!]]></script>
</body></html>