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

<!--
 Licensed to the Apache Software Foundation (ASF) under one or more
 contributor license agreements.  See the NOTICE file distributed with
 this work for additional information regarding copyright ownership.
 The ASF licenses this file to You under the Apache License, Version 2.0
 (the "License"); you may not use this file except in compliance with
 the License.  You may obtain a copy of the License at

     http://www.apache.org/licenses/LICENSE-2.0

 Unless required by applicable law or agreed to in writing, software
 distributed under the License is distributed on an "AS IS" BASIS,
 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 See the License for the specific language governing permissions and
 limitations under the License.
-->

<manualpage metafile="index.xml.meta">
<parentdocument href="../"/>

  <title>Apache mod_rewrite</title>

<summary>

    <p><module>mod_rewrite</module> provides a way to modify incoming
    URL requests, dynamically, based on <a href="intro.html#regex">regular 
    expression</a> rules. This allows you to map arbitrary URLs onto
    your internal URL structure in any way you like.</p>

      <p>It supports an unlimited number of rules and an
      unlimited number of attached rule conditions for each rule to
      provide a really flexible and powerful URL manipulation
      mechanism. The URL manipulations can depend on various tests:
      server variables, environment variables, HTTP
      headers, time stamps, external database lookups, and various other
      external programs or handlers, can be used to achieve granular URL
      matching.</p>

      <p>Rewrite rules can operate on the full URLs, including the path-info
      and query string portions, and may be used in per-server context
      (<code>httpd.conf</code>), per-virtualhost context (<directive
      type="section" module="core">VirtualHost</directive> blocks), or
      per-directory context (<code>.htaccess</code> files and <directive
      type="section" module="core">Directory</directive> blocks). The
      rewritten result can lead to further rules, internal
      sub-processing, external request redirection, or proxy
      passthrough, depending on what <a href="flags.html">flags</a> you
      attach to the rules.</p>

      <p>Since mod_rewrite is so powerful, it can indeed be rather
      complex. This document supplements the <a
      href="../mod/mod_rewrite.html">reference documentation</a>, and
      attempts to allay some of that complexity, and provide highly
      annotated examples of common scenarios that you may handle with
      mod_rewrite. But we also attempt to show you when you should not
      use mod_rewrite, and use other standard Apache features instead,
      thus avoiding this unnecessary complexity.</p>


<ul>
<li><a href="../mod/mod_rewrite.html">mod_rewrite reference
documentation</a></li>
<li><a href="intro.html">Introduction to regular expressions and mod_rewrite</a></li>
<li><a href="remapping.html">Using mod_rewrite for redirection and remapping of URLs</a></li>
<li><a href="access.html">Using mod_rewrite to control access</a></li>
<li><a href="vhosts.html">Dynamic virtual hosts with mod_rewrite</a></li>
<li><a href="proxy.html">Dynamic proxying with mod_rewrite</a></li>
<li><a href="rewritemap.html">Using RewriteMap</a></li>
<li><a href="advanced.html">Advanced techniques and tricks</a></li>
<li><a href="avoid.html">When <strong>NOT</strong> to use mod_rewrite</a></li>
<li><a href="flags.html">RewriteRule Flags</a></li>
<li><a href="tech.html">Technical details</a></li>
</ul>
</summary>

<seealso><a href="../mod/mod_rewrite.html">mod_rewrite reference
documentation</a></seealso>
<seealso><a href="../urlmapping.html">Mapping URLs to the Filesystem</a></seealso>
<seealso><a href="http://wiki.apache.org/httpd/Rewrite">mod_rewrite
wiki</a></seealso>
<seealso><a href="../glossary.html">Glossary</a></seealso>


</manualpage>


