mod_rewrite.html.en revision 835a0969a388f55dcf3ce0f606c8221be5a9c9be
97a9a944b5887e91042b019776c41d5dd74557aferikabele<?xml version="1.0" encoding="ISO-8859-1"?>
97a9a944b5887e91042b019776c41d5dd74557aferikabele<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
97a9a944b5887e91042b019776c41d5dd74557aferikabele<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"><head><!--
b1ced323143ade589985456a78f3f64d6a6580c5yoshiki XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
b1ced323143ade589985456a78f3f64d6a6580c5yoshiki This file is generated from xml source: DO NOT EDIT
b1ced323143ade589985456a78f3f64d6a6580c5yoshiki XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
0c4abc32c00611fe1d52c9661f5cc79a3f74c6d4nd -->
0c4abc32c00611fe1d52c9661f5cc79a3f74c6d4nd<title>mod_rewrite - Apache HTTP Server</title>
0c4abc32c00611fe1d52c9661f5cc79a3f74c6d4nd<link href="/style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
0c4abc32c00611fe1d52c9661f5cc79a3f74c6d4nd<link href="/style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
d29d9ab4614ff992b0e8de6e2b88d52b6f1f153erbowen<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" />
2e545ce2450a9953665f701bb05350f0d3f26275nd<script src="/style/scripts/prettify.min.js" type="text/javascript">
d29d9ab4614ff992b0e8de6e2b88d52b6f1f153erbowen</script>
d29d9ab4614ff992b0e8de6e2b88d52b6f1f153erbowen
0c4abc32c00611fe1d52c9661f5cc79a3f74c6d4nd<link href="/images/favicon.ico" rel="shortcut icon" /></head>
0c4abc32c00611fe1d52c9661f5cc79a3f74c6d4nd<body>
0c4abc32c00611fe1d52c9661f5cc79a3f74c6d4nd<div id="page-header">
af33a4994ae2ff15bc67d19ff1a7feb906745bf8rbowen<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>
3f08db06526d6901aa08c110b5bc7dde6bc39905nd<p class="apache">Apache HTTP Server Version 2.5</p>
0c4abc32c00611fe1d52c9661f5cc79a3f74c6d4nd<img alt="" src="/images/feather.gif" /></div>
0c4abc32c00611fe1d52c9661f5cc79a3f74c6d4nd<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="/images/left.gif" /></a></div>
0c4abc32c00611fe1d52c9661f5cc79a3f74c6d4nd<div id="path">
3f08db06526d6901aa08c110b5bc7dde6bc39905nd<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> &gt; <a href="./">Modules</a></div>
0c4abc32c00611fe1d52c9661f5cc79a3f74c6d4nd<div id="page-content">
0c4abc32c00611fe1d52c9661f5cc79a3f74c6d4nd<div id="preamble"><h1>Apache Module mod_rewrite</h1>
3b3b7fc78d1f5bfc2769903375050048ff41ff26nd<div class="toplang">
7dc5a2d4a0c77f5bf5a95de92d68e43de7d8117anilgun<p><span>Available Languages: </span><a href="/en/mod/mod_rewrite.html" title="English">&nbsp;en&nbsp;</a> |
f086b4b402fa9a2fefc7dda85de2a3cc1cd0a654rjung<a href="/fr/mod/mod_rewrite.html" hreflang="fr" rel="alternate" title="Fran�ais">&nbsp;fr&nbsp;</a></p>
3b3b7fc78d1f5bfc2769903375050048ff41ff26nd</div>
0c4abc32c00611fe1d52c9661f5cc79a3f74c6d4nd<table class="module"><tr><th><a href="module-dict.html#Description">Description:</a></th><td>Provides a rule-based rewriting engine to rewrite requested
0c4abc32c00611fe1d52c9661f5cc79a3f74c6d4ndURLs on the fly</td></tr>
0c4abc32c00611fe1d52c9661f5cc79a3f74c6d4nd<tr><th><a href="module-dict.html#Status">Status:</a></th><td>Extension</td></tr>
0c4abc32c00611fe1d52c9661f5cc79a3f74c6d4nd<tr><th><a href="module-dict.html#ModuleIdentifier">Module�Identifier:</a></th><td>rewrite_module</td></tr>
cea021a7fc2657b091df4d3b031c4254ec371dd7rbowen<tr><th><a href="module-dict.html#SourceFile">Source�File:</a></th><td>mod_rewrite.c</td></tr></table>
0c4abc32c00611fe1d52c9661f5cc79a3f74c6d4nd<h3>Summary</h3>
0c4abc32c00611fe1d52c9661f5cc79a3f74c6d4nd
9a58dc6a2b26ec128b1270cf48810e705f1a90dbsf <p>The <code class="module"><a href="/mod/mod_rewrite.html">mod_rewrite</a></code> module uses a rule-based rewriting
f19fa851b976a05691dea05be46586aa5aadeba2rbowen engine, based on a PCRE regular-expression parser, to rewrite requested URLs on
9a58dc6a2b26ec128b1270cf48810e705f1a90dbsf the fly. By default, <code class="module"><a href="/mod/mod_rewrite.html">mod_rewrite</a></code> maps a URL to a filesystem
f6445f3ad1c82f9398dc8edd77093cd3e20b806cnoirin path. However, it can also be used to redirect one URL to another URL, or
f6445f3ad1c82f9398dc8edd77093cd3e20b806cnoirin to invoke an internal proxy fetch.</p>
9a58dc6a2b26ec128b1270cf48810e705f1a90dbsf <p><code class="module"><a href="/mod/mod_rewrite.html">mod_rewrite</a></code> provides a flexible and powerful way to
9a58dc6a2b26ec128b1270cf48810e705f1a90dbsf manipulate URLs using an unlimited number of rules. Each rule can have an
f6445f3ad1c82f9398dc8edd77093cd3e20b806cnoirin unlimited number of attached rule conditions, to allow you to rewrite URL
9a58dc6a2b26ec128b1270cf48810e705f1a90dbsf based on server variables, environment variables, HTTP headers, or time
f6445f3ad1c82f9398dc8edd77093cd3e20b806cnoirin stamps.</p>
f6445f3ad1c82f9398dc8edd77093cd3e20b806cnoirin <p><code class="module"><a href="/mod/mod_rewrite.html">mod_rewrite</a></code> operates on the full URL path, including the
9a58dc6a2b26ec128b1270cf48810e705f1a90dbsf path-info section. A rewrite rule can be invoked in
9a58dc6a2b26ec128b1270cf48810e705f1a90dbsf <code>httpd.conf</code> or in <code>.htaccess</code>. The path generated
9a58dc6a2b26ec128b1270cf48810e705f1a90dbsf by a rewrite rule can include a query string, or can lead to internal
9a58dc6a2b26ec128b1270cf48810e705f1a90dbsf sub-processing, external request redirection, or internal proxy
f6445f3ad1c82f9398dc8edd77093cd3e20b806cnoirin throughput.</p>
06ba4a61654b3763ad65f52283832ebf058fdf1cslive
f0a393c5c2d7de58f447855369ad2fbfa254e544rbowen <p>Further details, discussion, and examples, are provided in the
f0a393c5c2d7de58f447855369ad2fbfa254e544rbowen <a href="/rewrite/">detailed mod_rewrite documentation</a>.</p>
0c4abc32c00611fe1d52c9661f5cc79a3f74c6d4nd</div>
0c4abc32c00611fe1d52c9661f5cc79a3f74c6d4nd<div id="quickview"><h3 class="directives">Directives</h3>
0c4abc32c00611fe1d52c9661f5cc79a3f74c6d4nd<ul id="toc">
0c4abc32c00611fe1d52c9661f5cc79a3f74c6d4nd<li><img alt="" src="/images/down.gif" /> <a href="#rewritebase">RewriteBase</a></li>
117c1f888a14e73cdd821dc6c23eb0411144a41cnd<li><img alt="" src="/images/down.gif" /> <a href="#rewritecond">RewriteCond</a></li>
117c1f888a14e73cdd821dc6c23eb0411144a41cnd<li><img alt="" src="/images/down.gif" /> <a href="#rewriteengine">RewriteEngine</a></li>
117c1f888a14e73cdd821dc6c23eb0411144a41cnd<li><img alt="" src="/images/down.gif" /> <a href="#rewritemap">RewriteMap</a></li>
117c1f888a14e73cdd821dc6c23eb0411144a41cnd<li><img alt="" src="/images/down.gif" /> <a href="#rewriteoptions">RewriteOptions</a></li>
117c1f888a14e73cdd821dc6c23eb0411144a41cnd<li><img alt="" src="/images/down.gif" /> <a href="#rewriterule">RewriteRule</a></li>
0c4abc32c00611fe1d52c9661f5cc79a3f74c6d4nd</ul>
b41a0dbe6310c576e96b7ea6910051fd84fb06f5sf<h3>Topics</h3>
b41a0dbe6310c576e96b7ea6910051fd84fb06f5sf<ul id="topics">
7571ea383299910bead3e93e66246cb212a28d0figalic<li><img alt="" src="/images/down.gif" /> <a href="#logging">Logging</a></li>
30471a4650391f57975f60bbb6e4a90be7b284bfhumbedooh</ul><ul class="seealso"><li><a href="#comments_section">Comments</a></li></ul></div>
b41a0dbe6310c576e96b7ea6910051fd84fb06f5sf<div class="top"><a href="#page-header"><img alt="top" src="/images/up.gif" /></a></div>
b41a0dbe6310c576e96b7ea6910051fd84fb06f5sf<div class="section">
7571ea383299910bead3e93e66246cb212a28d0figalic<h2><a name="logging" id="logging">Logging</a></h2>
b41a0dbe6310c576e96b7ea6910051fd84fb06f5sf
b41a0dbe6310c576e96b7ea6910051fd84fb06f5sf <p><code class="module"><a href="/mod/mod_rewrite.html">mod_rewrite</a></code> offers detailed logging of its actions
b41a0dbe6310c576e96b7ea6910051fd84fb06f5sf at the <code>trace1</code> to <code>trace8</code> log levels. The
b41a0dbe6310c576e96b7ea6910051fd84fb06f5sf log level can be set specifically for <code class="module"><a href="/mod/mod_rewrite.html">mod_rewrite</a></code>
b41a0dbe6310c576e96b7ea6910051fd84fb06f5sf using the <code class="directive"><a href="/mod/core.html#loglevel">LogLevel</a></code> directive: Up to
b41a0dbe6310c576e96b7ea6910051fd84fb06f5sf level <code>debug</code>, no actions are logged, while <code>trace8</code>
b41a0dbe6310c576e96b7ea6910051fd84fb06f5sf means that practically all actions are logged.</p>
b41a0dbe6310c576e96b7ea6910051fd84fb06f5sf
b41a0dbe6310c576e96b7ea6910051fd84fb06f5sf <div class="note">
b41a0dbe6310c576e96b7ea6910051fd84fb06f5sf Using a high trace log level for <code class="module"><a href="/mod/mod_rewrite.html">mod_rewrite</a></code>
b41a0dbe6310c576e96b7ea6910051fd84fb06f5sf will slow down your Apache HTTP Server dramatically! Use a log
1f0a28764a0520e43ce3a9130e56236fd67cd568igalic level higher than <code>trace2</code> only for debugging!
b41a0dbe6310c576e96b7ea6910051fd84fb06f5sf </div>
b41a0dbe6310c576e96b7ea6910051fd84fb06f5sf
20f499565e77defe9dab24dd85c02f38a1175855nd <div class="example"><h3>Example</h3><pre class="prettyprint lang-config">LogLevel alert rewrite:trace3</pre>
e487d6c09669296f94a5190cc34586a98e624a00nd</div>
f6445f3ad1c82f9398dc8edd77093cd3e20b806cnoirin
9b3696c7ad70387ecd46e0f061b99d381dc392f9rbowen <div class="note"><h3>RewriteLog</h3>
9b3696c7ad70387ecd46e0f061b99d381dc392f9rbowen <p>Those familiar with earlier versions of
9b3696c7ad70387ecd46e0f061b99d381dc392f9rbowen <code class="module"><a href="/mod/mod_rewrite.html">mod_rewrite</a></code> will no doubt be looking for the
9b3696c7ad70387ecd46e0f061b99d381dc392f9rbowen <code>RewriteLog</code> and <code>RewriteLogLevel</code>
9b3696c7ad70387ecd46e0f061b99d381dc392f9rbowen directives. This functionality has been completely replaced by the
9b3696c7ad70387ecd46e0f061b99d381dc392f9rbowen new per-module logging configuration mentioned above.
9b3696c7ad70387ecd46e0f061b99d381dc392f9rbowen </p>
9b3696c7ad70387ecd46e0f061b99d381dc392f9rbowen
9b3696c7ad70387ecd46e0f061b99d381dc392f9rbowen <p>To get just the <code class="module"><a href="/mod/mod_rewrite.html">mod_rewrite</a></code>-specific log
9b3696c7ad70387ecd46e0f061b99d381dc392f9rbowen messages, pipe the log file through grep:</p>
9b3696c7ad70387ecd46e0f061b99d381dc392f9rbowen <div class="example"><p><code>
9b3696c7ad70387ecd46e0f061b99d381dc392f9rbowen tail -f error_log|fgrep '[rewrite:'
9b3696c7ad70387ecd46e0f061b99d381dc392f9rbowen </code></p></div>
9b3696c7ad70387ecd46e0f061b99d381dc392f9rbowen </div>
9b3696c7ad70387ecd46e0f061b99d381dc392f9rbowen
b41a0dbe6310c576e96b7ea6910051fd84fb06f5sf</div>
0c4abc32c00611fe1d52c9661f5cc79a3f74c6d4nd<div class="top"><a href="#page-header"><img alt="top" src="/images/up.gif" /></a></div>
0c4abc32c00611fe1d52c9661f5cc79a3f74c6d4nd<div class="directive-section"><h2><a name="RewriteBase" id="RewriteBase">RewriteBase</a> <a name="rewritebase" id="rewritebase">Directive</a></h2>
0c4abc32c00611fe1d52c9661f5cc79a3f74c6d4nd<table class="directive">
0c4abc32c00611fe1d52c9661f5cc79a3f74c6d4nd<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Sets the base URL for per-directory rewrites</td></tr>
0c4abc32c00611fe1d52c9661f5cc79a3f74c6d4nd<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>RewriteBase <em>URL-path</em></code></td></tr>
635de20c16ef862bfc5b0d5f9ceb40ebeaddfdf3noirin<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>None</code></td></tr>
0c4abc32c00611fe1d52c9661f5cc79a3f74c6d4nd<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>directory, .htaccess</td></tr>
0c4abc32c00611fe1d52c9661f5cc79a3f74c6d4nd<tr><th><a href="directive-dict.html#Override">Override:</a></th><td>FileInfo</td></tr>
0c4abc32c00611fe1d52c9661f5cc79a3f74c6d4nd<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
0c4abc32c00611fe1d52c9661f5cc79a3f74c6d4nd<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_rewrite</td></tr>
0c4abc32c00611fe1d52c9661f5cc79a3f74c6d4nd</table>
06f0540592b1d6fc148e1ec9afc95ce48162db18covener <p>The <code class="directive">RewriteBase</code> directive specifies the
06f0540592b1d6fc148e1ec9afc95ce48162db18covener URL prefix to be used for per-directory (htaccess)
06f0540592b1d6fc148e1ec9afc95ce48162db18covener <code class="directive">RewriteRule</code> directives that substitute a relative
06f0540592b1d6fc148e1ec9afc95ce48162db18covener path.</p>
06f0540592b1d6fc148e1ec9afc95ce48162db18covener <p> This directive is <em>required</em> when you use a relative path
06f0540592b1d6fc148e1ec9afc95ce48162db18covener in a substitution in per-directory (htaccess) context unless either
b9bf3918f6eaf7747bcbfbd02792bcbe4a052784nilgun of the following conditions are true:</p>
06f0540592b1d6fc148e1ec9afc95ce48162db18covener <ul>
06f0540592b1d6fc148e1ec9afc95ce48162db18covener <li> The original request, and the substitution, are underneath the
06f0540592b1d6fc148e1ec9afc95ce48162db18covener <code class="directive"><a href="/mod/core.html#documentroot">DocumentRoot</a></code>
06f0540592b1d6fc148e1ec9afc95ce48162db18covener (as opposed to reachable by other means, such as
06f0540592b1d6fc148e1ec9afc95ce48162db18covener <code class="directive"><a href="/mod/mod_alias.html#alias">Alias</a></code>).</li>
06f0540592b1d6fc148e1ec9afc95ce48162db18covener <li> The <em>filesystem</em> path to the directory containing the
06f0540592b1d6fc148e1ec9afc95ce48162db18covener <code class="directive">RewriteRule</code>, suffixed by the relative
06f0540592b1d6fc148e1ec9afc95ce48162db18covener substitution is also valid as a URL path on the server
06f0540592b1d6fc148e1ec9afc95ce48162db18covener (this is rare).</li>
06f0540592b1d6fc148e1ec9afc95ce48162db18covener </ul>
635de20c16ef862bfc5b0d5f9ceb40ebeaddfdf3noirin
06f0540592b1d6fc148e1ec9afc95ce48162db18covener<p> In the example below, <code class="directive">RewriteBase</code> is necessary
06f0540592b1d6fc148e1ec9afc95ce48162db18covener to avoid rewriting to http://example.com/opt/myapp-1.2.3/welcome.html
06f0540592b1d6fc148e1ec9afc95ce48162db18covener since the resource was not relative to the document root. This
06f0540592b1d6fc148e1ec9afc95ce48162db18covener misconfiguration would normally cause the server to look for an "opt"
06f0540592b1d6fc148e1ec9afc95ce48162db18covener directory under the document root.</p>
4aa603e6448b99f9371397d439795c91a93637eand<pre class="prettyprint lang-config">DocumentRoot /var/www/example.com
06f0540592b1d6fc148e1ec9afc95ce48162db18covenerAlias /myapp /opt/myapp-1.2.3
06f0540592b1d6fc148e1ec9afc95ce48162db18covener&lt;Directory /opt/myapp-1.2.3&gt;
17ade6df5ec233536985eb1c130a906c725dd614humbedooh RewriteEngine On
17ade6df5ec233536985eb1c130a906c725dd614humbedooh RewriteBase /myapp/
17ade6df5ec233536985eb1c130a906c725dd614humbedooh RewriteRule ^index\.html$ welcome.html
4aa603e6448b99f9371397d439795c91a93637eand&lt;/Directory&gt;</pre>
17ade6df5ec233536985eb1c130a906c725dd614humbedooh
06ba4a61654b3763ad65f52283832ebf058fdf1cslive
0c4abc32c00611fe1d52c9661f5cc79a3f74c6d4nd</div>
0c4abc32c00611fe1d52c9661f5cc79a3f74c6d4nd<div class="top"><a href="#page-header"><img alt="top" src="/images/up.gif" /></a></div>
0c4abc32c00611fe1d52c9661f5cc79a3f74c6d4nd<div class="directive-section"><h2><a name="RewriteCond" id="RewriteCond">RewriteCond</a> <a name="rewritecond" id="rewritecond">Directive</a></h2>
0c4abc32c00611fe1d52c9661f5cc79a3f74c6d4nd<table class="directive">
0c4abc32c00611fe1d52c9661f5cc79a3f74c6d4nd<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Defines a condition under which rewriting will take place
0c4abc32c00611fe1d52c9661f5cc79a3f74c6d4nd</td></tr>
0c4abc32c00611fe1d52c9661f5cc79a3f74c6d4nd<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code> RewriteCond
0c4abc32c00611fe1d52c9661f5cc79a3f74c6d4nd <em>TestString</em> <em>CondPattern</em></code></td></tr>
0c4abc32c00611fe1d52c9661f5cc79a3f74c6d4nd<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host, directory, .htaccess</td></tr>
0c4abc32c00611fe1d52c9661f5cc79a3f74c6d4nd<tr><th><a href="directive-dict.html#Override">Override:</a></th><td>FileInfo</td></tr>
0c4abc32c00611fe1d52c9661f5cc79a3f74c6d4nd<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
0c4abc32c00611fe1d52c9661f5cc79a3f74c6d4nd<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_rewrite</td></tr>
0c4abc32c00611fe1d52c9661f5cc79a3f74c6d4nd</table>
fa0f379e3845907d7c1087d885169e302239bdbbnd <p>The <code class="directive">RewriteCond</code> directive defines a
fa0f379e3845907d7c1087d885169e302239bdbbnd rule condition. One or more <code class="directive">RewriteCond</code>
fa0f379e3845907d7c1087d885169e302239bdbbnd can precede a <code class="directive"><a href="#rewriterule">RewriteRule</a></code>
fa0f379e3845907d7c1087d885169e302239bdbbnd directive. The following rule is then only used if both
fa0f379e3845907d7c1087d885169e302239bdbbnd the current state of the URI matches its pattern, <strong>and</strong> if these conditions are met.</p>
fa0f379e3845907d7c1087d885169e302239bdbbnd
fa0f379e3845907d7c1087d885169e302239bdbbnd <p><em>TestString</em> is a string which can contain the
fa0f379e3845907d7c1087d885169e302239bdbbnd following expanded constructs in addition to plain text:</p>
fa0f379e3845907d7c1087d885169e302239bdbbnd
06ba4a61654b3763ad65f52283832ebf058fdf1cslive <ul>
06ba4a61654b3763ad65f52283832ebf058fdf1cslive <li>
06ba4a61654b3763ad65f52283832ebf058fdf1cslive <strong>RewriteRule backreferences</strong>: These are
bf380c59be3f235bde21f1c00098e09e3cf7e7aerpluem backreferences of the form <strong><code>$N</code></strong>
b115299831a7b4bbec58a88d708d8536e1ecd50csf (0 &lt;= N &lt;= 9). $1 to $9 provide access to the grouped
fa0f379e3845907d7c1087d885169e302239bdbbnd parts (in parentheses) of the pattern, from the
fa0f379e3845907d7c1087d885169e302239bdbbnd <code>RewriteRule</code> which is subject to the current
b115299831a7b4bbec58a88d708d8536e1ecd50csf set of <code>RewriteCond</code> conditions. $0 provides
b115299831a7b4bbec58a88d708d8536e1ecd50csf access to the whole string matched by that pattern.
fa0f379e3845907d7c1087d885169e302239bdbbnd </li>
06ba4a61654b3763ad65f52283832ebf058fdf1cslive <li>
06ba4a61654b3763ad65f52283832ebf058fdf1cslive <strong>RewriteCond backreferences</strong>: These are
bf380c59be3f235bde21f1c00098e09e3cf7e7aerpluem backreferences of the form <strong><code>%N</code></strong>
b115299831a7b4bbec58a88d708d8536e1ecd50csf (0 &lt;= N &lt;= 9). %1 to %9 provide access to the grouped
fa0f379e3845907d7c1087d885169e302239bdbbnd parts (again, in parentheses) of the pattern, from the last matched
fa0f379e3845907d7c1087d885169e302239bdbbnd <code>RewriteCond</code> in the current set
b115299831a7b4bbec58a88d708d8536e1ecd50csf of conditions. %0 provides access to the whole string matched by
b115299831a7b4bbec58a88d708d8536e1ecd50csf that pattern.
fa0f379e3845907d7c1087d885169e302239bdbbnd </li>
06ba4a61654b3763ad65f52283832ebf058fdf1cslive <li>
06ba4a61654b3763ad65f52283832ebf058fdf1cslive <strong>RewriteMap expansions</strong>: These are
bf380c59be3f235bde21f1c00098e09e3cf7e7aerpluem expansions of the form <strong><code>${mapname:key|default}</code></strong>.
fa0f379e3845907d7c1087d885169e302239bdbbnd See <a href="#mapfunc">the documentation for
fa0f379e3845907d7c1087d885169e302239bdbbnd RewriteMap</a> for more details.
06ba4a61654b3763ad65f52283832ebf058fdf1cslive </li>
06ba4a61654b3763ad65f52283832ebf058fdf1cslive <li>
fa0f379e3845907d7c1087d885169e302239bdbbnd <strong>Server-Variables</strong>: These are variables of
81785f72c9d133aef57ad6b02f248345d90239aapoirier the form
fa0f379e3845907d7c1087d885169e302239bdbbnd <strong><code>%{</code> <em>NAME_OF_VARIABLE</em>
fa0f379e3845907d7c1087d885169e302239bdbbnd <code>}</code></strong>
fa0f379e3845907d7c1087d885169e302239bdbbnd where <em>NAME_OF_VARIABLE</em> can be a string taken
fa0f379e3845907d7c1087d885169e302239bdbbnd from the following list:
fa0f379e3845907d7c1087d885169e302239bdbbnd
fa0f379e3845907d7c1087d885169e302239bdbbnd <table>
c6a2d6fa44f8698851dec5051ee3782c2913605fnd
06ba4a61654b3763ad65f52283832ebf058fdf1cslive <tr>
97a9a944b5887e91042b019776c41d5dd74557aferikabele <th>HTTP headers:</th> <th>connection &amp; request:</th> <th />
5ae30adbe59946de742ab0cd6be3b7457471a698takashi </tr>
97a9a944b5887e91042b019776c41d5dd74557aferikabele
97a9a944b5887e91042b019776c41d5dd74557aferikabele <tr>
5ae30adbe59946de742ab0cd6be3b7457471a698takashi <td>
5ae30adbe59946de742ab0cd6be3b7457471a698takashi HTTP_USER_AGENT<br />
97a9a944b5887e91042b019776c41d5dd74557aferikabele HTTP_REFERER<br />
97a9a944b5887e91042b019776c41d5dd74557aferikabele HTTP_COOKIE<br />
97a9a944b5887e91042b019776c41d5dd74557aferikabele HTTP_FORWARDED<br />
97a9a944b5887e91042b019776c41d5dd74557aferikabele HTTP_HOST<br />
97a9a944b5887e91042b019776c41d5dd74557aferikabele HTTP_PROXY_CONNECTION<br />
97a9a944b5887e91042b019776c41d5dd74557aferikabele HTTP_ACCEPT<br />
06ba4a61654b3763ad65f52283832ebf058fdf1cslive </td>
06ba4a61654b3763ad65f52283832ebf058fdf1cslive
06ba4a61654b3763ad65f52283832ebf058fdf1cslive <td>
97a9a944b5887e91042b019776c41d5dd74557aferikabele REMOTE_ADDR<br />
1b9c57e74f282283966fa424192df142595338bdnd CONN_REMOTE_ADDR<br />
97a9a944b5887e91042b019776c41d5dd74557aferikabele REMOTE_HOST<br />
74a6de79356cd15d2e47065087785e36dd65aa41nd REMOTE_PORT<br />
97a9a944b5887e91042b019776c41d5dd74557aferikabele REMOTE_USER<br />
97a9a944b5887e91042b019776c41d5dd74557aferikabele REMOTE_IDENT<br />
97a9a944b5887e91042b019776c41d5dd74557aferikabele REQUEST_METHOD<br />
97a9a944b5887e91042b019776c41d5dd74557aferikabele SCRIPT_FILENAME<br />
97a9a944b5887e91042b019776c41d5dd74557aferikabele PATH_INFO<br />
97a9a944b5887e91042b019776c41d5dd74557aferikabele QUERY_STRING<br />
97a9a944b5887e91042b019776c41d5dd74557aferikabele AUTH_TYPE<br />
06ba4a61654b3763ad65f52283832ebf058fdf1cslive </td>
5ae30adbe59946de742ab0cd6be3b7457471a698takashi
5ae30adbe59946de742ab0cd6be3b7457471a698takashi <td />
06ba4a61654b3763ad65f52283832ebf058fdf1cslive </tr>
06ba4a61654b3763ad65f52283832ebf058fdf1cslive
06ba4a61654b3763ad65f52283832ebf058fdf1cslive <tr>
53d2fd50ff45e7c568f0588c742a5ef9edf8e275rbowen <th>server internals:</th> <th>date and time:</th> <th>specials:</th>
5ae30adbe59946de742ab0cd6be3b7457471a698takashi </tr>
97a9a944b5887e91042b019776c41d5dd74557aferikabele
97a9a944b5887e91042b019776c41d5dd74557aferikabele <tr>
5ae30adbe59946de742ab0cd6be3b7457471a698takashi <td>
5ae30adbe59946de742ab0cd6be3b7457471a698takashi DOCUMENT_ROOT<br />
97a9a944b5887e91042b019776c41d5dd74557aferikabele SERVER_ADMIN<br />
97a9a944b5887e91042b019776c41d5dd74557aferikabele SERVER_NAME<br />
97a9a944b5887e91042b019776c41d5dd74557aferikabele SERVER_ADDR<br />
97a9a944b5887e91042b019776c41d5dd74557aferikabele SERVER_PORT<br />
97a9a944b5887e91042b019776c41d5dd74557aferikabele SERVER_PROTOCOL<br />
97a9a944b5887e91042b019776c41d5dd74557aferikabele SERVER_SOFTWARE<br />
06ba4a61654b3763ad65f52283832ebf058fdf1cslive </td>
06ba4a61654b3763ad65f52283832ebf058fdf1cslive
06ba4a61654b3763ad65f52283832ebf058fdf1cslive <td>
97a9a944b5887e91042b019776c41d5dd74557aferikabele TIME_YEAR<br />
97a9a944b5887e91042b019776c41d5dd74557aferikabele TIME_MON<br />
97a9a944b5887e91042b019776c41d5dd74557aferikabele TIME_DAY<br />
97a9a944b5887e91042b019776c41d5dd74557aferikabele TIME_HOUR<br />
97a9a944b5887e91042b019776c41d5dd74557aferikabele TIME_MIN<br />
97a9a944b5887e91042b019776c41d5dd74557aferikabele TIME_SEC<br />
97a9a944b5887e91042b019776c41d5dd74557aferikabele TIME_WDAY<br />
97a9a944b5887e91042b019776c41d5dd74557aferikabele TIME<br />
06ba4a61654b3763ad65f52283832ebf058fdf1cslive </td>
06ba4a61654b3763ad65f52283832ebf058fdf1cslive
06ba4a61654b3763ad65f52283832ebf058fdf1cslive <td>
97a9a944b5887e91042b019776c41d5dd74557aferikabele API_VERSION<br />
97a9a944b5887e91042b019776c41d5dd74557aferikabele THE_REQUEST<br />
97a9a944b5887e91042b019776c41d5dd74557aferikabele REQUEST_URI<br />
97a9a944b5887e91042b019776c41d5dd74557aferikabele REQUEST_FILENAME<br />
97a9a944b5887e91042b019776c41d5dd74557aferikabele IS_SUBREQ<br />
fb82af0f0cd7b58eef19c54b086131b7e1e1e749madhum HTTPS<br />
4203a35c28d7c60adb7e9ef3be87aad34951c79asf REQUEST_SCHEME<br />
06ba4a61654b3763ad65f52283832ebf058fdf1cslive </td>
06ba4a61654b3763ad65f52283832ebf058fdf1cslive </tr>
06ba4a61654b3763ad65f52283832ebf058fdf1cslive </table>
fa0f379e3845907d7c1087d885169e302239bdbbnd
fa0f379e3845907d7c1087d885169e302239bdbbnd <p>These variables all
fa0f379e3845907d7c1087d885169e302239bdbbnd correspond to the similarly named HTTP
cea021a7fc2657b091df4d3b031c4254ec371dd7rbowen MIME-headers, C variables of the Apache HTTP Server or
fa0f379e3845907d7c1087d885169e302239bdbbnd <code>struct tm</code> fields of the Unix system.
fa0f379e3845907d7c1087d885169e302239bdbbnd Most are documented elsewhere in the Manual or in
37ef4b86270a8e58f87aa5fe558e3e65af97991ccovener the CGI specification.</p>
37ef4b86270a8e58f87aa5fe558e3e65af97991ccovener
9a58dc6a2b26ec128b1270cf48810e705f1a90dbsf <p>SERVER_NAME and SERVER_PORT depend on the values of
37ef4b86270a8e58f87aa5fe558e3e65af97991ccovener <code class="directive"><a href="/mod/core.html#usecanonicalname">UseCanonicalName</a></code> and
37ef4b86270a8e58f87aa5fe558e3e65af97991ccovener <code class="directive"><a href="/mod/core.html#usecanonicalphysicalport">UseCanonicalPhysicalPort</a></code>
37ef4b86270a8e58f87aa5fe558e3e65af97991ccovener respectively.</p>
37ef4b86270a8e58f87aa5fe558e3e65af97991ccovener
37ef4b86270a8e58f87aa5fe558e3e65af97991ccovener <p>Those that are special to mod_rewrite include those below.</p>
fa0f379e3845907d7c1087d885169e302239bdbbnd <div class="note">
06ba4a61654b3763ad65f52283832ebf058fdf1cslive <dl>
06ba4a61654b3763ad65f52283832ebf058fdf1cslive <dt><code>IS_SUBREQ</code></dt>
06ba4a61654b3763ad65f52283832ebf058fdf1cslive
fa0f379e3845907d7c1087d885169e302239bdbbnd <dd>Will contain the text "true" if the request
fa0f379e3845907d7c1087d885169e302239bdbbnd currently being processed is a sub-request,
06ba4a61654b3763ad65f52283832ebf058fdf1cslive "false" otherwise. Sub-requests may be generated
06ba4a61654b3763ad65f52283832ebf058fdf1cslive by modules that need to resolve additional files
06ba4a61654b3763ad65f52283832ebf058fdf1cslive or URIs in order to complete their tasks.</dd>
06ba4a61654b3763ad65f52283832ebf058fdf1cslive
06ba4a61654b3763ad65f52283832ebf058fdf1cslive <dt><code>API_VERSION</code></dt>
06ba4a61654b3763ad65f52283832ebf058fdf1cslive
cea021a7fc2657b091df4d3b031c4254ec371dd7rbowen <dd>This is the version of the Apache httpd module API
fa0f379e3845907d7c1087d885169e302239bdbbnd (the internal interface between server and
fa0f379e3845907d7c1087d885169e302239bdbbnd module) in the current httpd build, as defined in
fa0f379e3845907d7c1087d885169e302239bdbbnd include/ap_mmn.h. The module API version
cea021a7fc2657b091df4d3b031c4254ec371dd7rbowen corresponds to the version of Apache httpd in use (in
cea021a7fc2657b091df4d3b031c4254ec371dd7rbowen the release version of Apache httpd 1.3.14, for
fa0f379e3845907d7c1087d885169e302239bdbbnd instance, it is 19990320:10), but is mainly of
fa0f379e3845907d7c1087d885169e302239bdbbnd interest to module authors.</dd>
06ba4a61654b3763ad65f52283832ebf058fdf1cslive
06ba4a61654b3763ad65f52283832ebf058fdf1cslive <dt><code>THE_REQUEST</code></dt>
06ba4a61654b3763ad65f52283832ebf058fdf1cslive
06ba4a61654b3763ad65f52283832ebf058fdf1cslive <dd>The full HTTP request line sent by the
06ba4a61654b3763ad65f52283832ebf058fdf1cslive browser to the server (e.g., "<code>GET
06ba4a61654b3763ad65f52283832ebf058fdf1cslive /index.html HTTP/1.1</code>"). This does not
06ba4a61654b3763ad65f52283832ebf058fdf1cslive include any additional headers sent by the
9a58dc6a2b26ec128b1270cf48810e705f1a90dbsf browser. This value has not been unescaped
777c17c11c2b1638f191241364e034779851d186covener (decoded), unlike most other variables below.</dd>
06ba4a61654b3763ad65f52283832ebf058fdf1cslive
06ba4a61654b3763ad65f52283832ebf058fdf1cslive <dt><code>REQUEST_URI</code></dt>
06ba4a61654b3763ad65f52283832ebf058fdf1cslive
0844fff26cb7719e0f0a368d88544156ed6374b6sf <dd>The path component of the requested URI,
0844fff26cb7719e0f0a368d88544156ed6374b6sf such as "/index.html". This notably excludes the
0844fff26cb7719e0f0a368d88544156ed6374b6sf query string which is available as as its own variable
0844fff26cb7719e0f0a368d88544156ed6374b6sf named <code>QUERY_STRING</code>.</dd>
06ba4a61654b3763ad65f52283832ebf058fdf1cslive
06ba4a61654b3763ad65f52283832ebf058fdf1cslive <dt><code>REQUEST_FILENAME</code></dt>
06ba4a61654b3763ad65f52283832ebf058fdf1cslive
fa0f379e3845907d7c1087d885169e302239bdbbnd <dd>The full local filesystem path to the file or
c0a201f9f0cda37f4e5829462c7e489f85bf327ccovener script matching the request, if this has already
9a58dc6a2b26ec128b1270cf48810e705f1a90dbsf been determined by the server at the time
9a58dc6a2b26ec128b1270cf48810e705f1a90dbsf <code>REQUEST_FILENAME</code> is referenced. Otherwise,
9a58dc6a2b26ec128b1270cf48810e705f1a90dbsf such as when used in virtual host context, the same
15a7e433cd5ddbb53d48a11f2f8732d9ea6a48caminfrin value as <code>REQUEST_URI</code>. Depending on the value of
15a7e433cd5ddbb53d48a11f2f8732d9ea6a48caminfrin <code class="directive"><a href="/mod/core.html#acceptpathinfo">AcceptPathInfo</a></code>, the
15a7e433cd5ddbb53d48a11f2f8732d9ea6a48caminfrin server may have only used some leading components of the
15a7e433cd5ddbb53d48a11f2f8732d9ea6a48caminfrin <code>REQUEST_URI</code> to map the request to a file.
15a7e433cd5ddbb53d48a11f2f8732d9ea6a48caminfrin </dd>
eaaa852423e42d6d86bcada80ed781a205fc3e5fnd
eaaa852423e42d6d86bcada80ed781a205fc3e5fnd <dt><code>HTTPS</code></dt>
eaaa852423e42d6d86bcada80ed781a205fc3e5fnd
fa0f379e3845907d7c1087d885169e302239bdbbnd <dd>Will contain the text "on" if the connection is
fa0f379e3845907d7c1087d885169e302239bdbbnd using SSL/TLS, or "off" otherwise. (This variable
fa0f379e3845907d7c1087d885169e302239bdbbnd can be safely used regardless of whether or not
fa0f379e3845907d7c1087d885169e302239bdbbnd <code class="module"><a href="/mod/mod_ssl.html">mod_ssl</a></code> is loaded).</dd>
eaaa852423e42d6d86bcada80ed781a205fc3e5fnd
4203a35c28d7c60adb7e9ef3be87aad34951c79asf <dt><code>REQUEST_SCHEME</code></dt>
4203a35c28d7c60adb7e9ef3be87aad34951c79asf
4eafd186275d2df6e74aaa778a57b24a6c725e49humbedooh <dd>Will contain the scheme of the request (usually
4203a35c28d7c60adb7e9ef3be87aad34951c79asf "http" or "https"). This value can be influenced with
4203a35c28d7c60adb7e9ef3be87aad34951c79asf <code class="directive"><a href="/mod/core.html#servername">ServerName</a></code>.</dd>
4203a35c28d7c60adb7e9ef3be87aad34951c79asf
1b9c57e74f282283966fa424192df142595338bdnd <dt><code>REMOTE_ADDR</code></dt>
1b9c57e74f282283966fa424192df142595338bdnd <dd>The IP address of the remote host (see the
1b9c57e74f282283966fa424192df142595338bdnd <code class="module"><a href="/mod/mod_remoteip.html">mod_remoteip</a></code> module).</dd>
1b9c57e74f282283966fa424192df142595338bdnd
1b9c57e74f282283966fa424192df142595338bdnd <dt><code>CONN_REMOTE_ADDR</code></dt>
1b9c57e74f282283966fa424192df142595338bdnd <dd>Since 2.4.8: The peer IP address of the connection (see the
1b9c57e74f282283966fa424192df142595338bdnd <code class="module"><a href="/mod/mod_remoteip.html">mod_remoteip</a></code> module).</dd>
1b9c57e74f282283966fa424192df142595338bdnd
06ba4a61654b3763ad65f52283832ebf058fdf1cslive </dl>
97a9a944b5887e91042b019776c41d5dd74557aferikabele</div>
fa0f379e3845907d7c1087d885169e302239bdbbnd </li>
fa0f379e3845907d7c1087d885169e302239bdbbnd </ul>
fa0f379e3845907d7c1087d885169e302239bdbbnd
c11bfe6804eff2f4c7054cf2f7b06f0c8b32e596sf <p>If the <em>TestString</em> has the special value <code>expr</code>,
c11bfe6804eff2f4c7054cf2f7b06f0c8b32e596sf the <em>CondPattern</em> will be treated as an
c11bfe6804eff2f4c7054cf2f7b06f0c8b32e596sf <a href="/expr.html">ap_expr</a>. HTTP headers referenced in the
c11bfe6804eff2f4c7054cf2f7b06f0c8b32e596sf expression will be added to the Vary header if the <code>novary</code>
c11bfe6804eff2f4c7054cf2f7b06f0c8b32e596sf flag is not given.</p>
4cb65c31bc681540ea623e1cb2bdd09749fb8d7esf
fa0f379e3845907d7c1087d885169e302239bdbbnd <p>Other things you should be aware of:</p>
06ba4a61654b3763ad65f52283832ebf058fdf1cslive
fa0f379e3845907d7c1087d885169e302239bdbbnd <ol>
fa0f379e3845907d7c1087d885169e302239bdbbnd <li>
fa0f379e3845907d7c1087d885169e302239bdbbnd <p>The variables SCRIPT_FILENAME and REQUEST_FILENAME
fa0f379e3845907d7c1087d885169e302239bdbbnd contain the same value - the value of the
06ba4a61654b3763ad65f52283832ebf058fdf1cslive <code>filename</code> field of the internal
cea021a7fc2657b091df4d3b031c4254ec371dd7rbowen <code>request_rec</code> structure of the Apache HTTP Server.
fa0f379e3845907d7c1087d885169e302239bdbbnd The first name is the commonly known CGI variable name
fa0f379e3845907d7c1087d885169e302239bdbbnd while the second is the appropriate counterpart of
fa0f379e3845907d7c1087d885169e302239bdbbnd REQUEST_URI (which contains the value of the
fa0f379e3845907d7c1087d885169e302239bdbbnd <code>uri</code> field of <code>request_rec</code>).</p>
fa0f379e3845907d7c1087d885169e302239bdbbnd <p>If a substitution occurred and the rewriting continues,
fa0f379e3845907d7c1087d885169e302239bdbbnd the value of both variables will be updated accordingly.</p>
fa0f379e3845907d7c1087d885169e302239bdbbnd <p>If used in per-server context (<em>i.e.</em>, before the
fa0f379e3845907d7c1087d885169e302239bdbbnd request is mapped to the filesystem) SCRIPT_FILENAME and
fa0f379e3845907d7c1087d885169e302239bdbbnd REQUEST_FILENAME cannot contain the full local filesystem
fa0f379e3845907d7c1087d885169e302239bdbbnd path since the path is unknown at this stage of processing.
fa0f379e3845907d7c1087d885169e302239bdbbnd Both variables will initially contain the value of REQUEST_URI
fa0f379e3845907d7c1087d885169e302239bdbbnd in that case. In order to obtain the full local filesystem
fa0f379e3845907d7c1087d885169e302239bdbbnd path of the request in per-server context, use an URL-based
a4d04b8c74044c58bd4182028a1408d936c95951covener look-ahead <code>%{LA-U:REQUEST_FILENAME}</code> to determine
fa0f379e3845907d7c1087d885169e302239bdbbnd the final value of REQUEST_FILENAME.</p></li>
06ba4a61654b3763ad65f52283832ebf058fdf1cslive
fa0f379e3845907d7c1087d885169e302239bdbbnd <li>
fa0f379e3845907d7c1087d885169e302239bdbbnd <code>%{ENV:variable}</code>, where <em>variable</em> can be
fa0f379e3845907d7c1087d885169e302239bdbbnd any environment variable, is also available.
fa0f379e3845907d7c1087d885169e302239bdbbnd This is looked-up via internal
cea021a7fc2657b091df4d3b031c4254ec371dd7rbowen Apache httpd structures and (if not found there) via
cea021a7fc2657b091df4d3b031c4254ec371dd7rbowen <code>getenv()</code> from the Apache httpd server process.</li>
06ba4a61654b3763ad65f52283832ebf058fdf1cslive
bf380c59be3f235bde21f1c00098e09e3cf7e7aerpluem <li>
fa0f379e3845907d7c1087d885169e302239bdbbnd <code>%{SSL:variable}</code>, where <em>variable</em> is the
eaaa852423e42d6d86bcada80ed781a205fc3e5fnd name of an <a href="mod_ssl.html#envvars">SSL environment
fa0f379e3845907d7c1087d885169e302239bdbbnd variable</a>, can be used whether or not
fa0f379e3845907d7c1087d885169e302239bdbbnd <code class="module"><a href="/mod/mod_ssl.html">mod_ssl</a></code> is loaded, but will always expand to
fa0f379e3845907d7c1087d885169e302239bdbbnd the empty string if it is not. Example:
fa0f379e3845907d7c1087d885169e302239bdbbnd <code>%{SSL:SSL_CIPHER_USEKEYSIZE}</code> may expand to
fa0f379e3845907d7c1087d885169e302239bdbbnd <code>128</code>.</li>
fa0f379e3845907d7c1087d885169e302239bdbbnd
fa0f379e3845907d7c1087d885169e302239bdbbnd <li>
fa0f379e3845907d7c1087d885169e302239bdbbnd <code>%{HTTP:header}</code>, where <em>header</em> can be
fa0f379e3845907d7c1087d885169e302239bdbbnd any HTTP MIME-header name, can always be used to obtain the
fa0f379e3845907d7c1087d885169e302239bdbbnd value of a header sent in the HTTP request.
fa0f379e3845907d7c1087d885169e302239bdbbnd Example: <code>%{HTTP:Proxy-Connection}</code> is
fa0f379e3845907d7c1087d885169e302239bdbbnd the value of the HTTP header
fa0f379e3845907d7c1087d885169e302239bdbbnd ``<code>Proxy-Connection:</code>''.
fa0f379e3845907d7c1087d885169e302239bdbbnd <p>If a HTTP header is used in a condition this header is added to
fa0f379e3845907d7c1087d885169e302239bdbbnd the Vary header of the response in case the condition evaluates to
fa0f379e3845907d7c1087d885169e302239bdbbnd to true for the request. It is <strong>not</strong> added if the
fa0f379e3845907d7c1087d885169e302239bdbbnd condition evaluates to false for the request. Adding the HTTP header
fa0f379e3845907d7c1087d885169e302239bdbbnd to the Vary header of the response is needed for proper caching.</p>
fa0f379e3845907d7c1087d885169e302239bdbbnd <p>It has to be kept in mind that conditions follow a short circuit
fa0f379e3845907d7c1087d885169e302239bdbbnd logic in the case of the '<strong><code>ornext|OR</code></strong>' flag
fa0f379e3845907d7c1087d885169e302239bdbbnd so that certain conditions might not be evaluated at all.</p></li>
fa0f379e3845907d7c1087d885169e302239bdbbnd
bf380c59be3f235bde21f1c00098e09e3cf7e7aerpluem <li>
025dc11c0fd8d6a7fdb5f0a46cc3a5fbab64b93drbowen <a id="LA-U" name="LA-U"><code>%{LA-U:variable}</code></a>
025dc11c0fd8d6a7fdb5f0a46cc3a5fbab64b93drbowen can be used for look-aheads which perform
fa0f379e3845907d7c1087d885169e302239bdbbnd an internal (URL-based) sub-request to determine the final
fa0f379e3845907d7c1087d885169e302239bdbbnd value of <em>variable</em>. This can be used to access
fa0f379e3845907d7c1087d885169e302239bdbbnd variable for rewriting which is not available at the current
fa0f379e3845907d7c1087d885169e302239bdbbnd stage, but will be set in a later phase.
fa0f379e3845907d7c1087d885169e302239bdbbnd <p>For instance, to rewrite according to the
fa0f379e3845907d7c1087d885169e302239bdbbnd <code>REMOTE_USER</code> variable from within the
fa0f379e3845907d7c1087d885169e302239bdbbnd per-server context (<code>httpd.conf</code> file) you must
fa0f379e3845907d7c1087d885169e302239bdbbnd use <code>%{LA-U:REMOTE_USER}</code> - this
fa0f379e3845907d7c1087d885169e302239bdbbnd variable is set by the authorization phases, which come
fa0f379e3845907d7c1087d885169e302239bdbbnd <em>after</em> the URL translation phase (during which mod_rewrite
fa0f379e3845907d7c1087d885169e302239bdbbnd operates).</p>
fa0f379e3845907d7c1087d885169e302239bdbbnd <p>On the other hand, because mod_rewrite implements
fa0f379e3845907d7c1087d885169e302239bdbbnd its per-directory context (<code>.htaccess</code> file) via
fa0f379e3845907d7c1087d885169e302239bdbbnd the Fixup phase of the API and because the authorization
fa0f379e3845907d7c1087d885169e302239bdbbnd phases come <em>before</em> this phase, you just can use
fa0f379e3845907d7c1087d885169e302239bdbbnd <code>%{REMOTE_USER}</code> in that context.</p></li>
fa0f379e3845907d7c1087d885169e302239bdbbnd
bf380c59be3f235bde21f1c00098e09e3cf7e7aerpluem <li>
fa0f379e3845907d7c1087d885169e302239bdbbnd <code>%{LA-F:variable}</code> can be used to perform an internal
fa0f379e3845907d7c1087d885169e302239bdbbnd (filename-based) sub-request, to determine the final value
fa0f379e3845907d7c1087d885169e302239bdbbnd of <em>variable</em>. Most of the time, this is the same as
fa0f379e3845907d7c1087d885169e302239bdbbnd LA-U above.</li>
fa0f379e3845907d7c1087d885169e302239bdbbnd </ol>
06ba4a61654b3763ad65f52283832ebf058fdf1cslive
06ba4a61654b3763ad65f52283832ebf058fdf1cslive <p><em>CondPattern</em> is the condition pattern,
bf380c59be3f235bde21f1c00098e09e3cf7e7aerpluem a regular expression which is applied to the
bf380c59be3f235bde21f1c00098e09e3cf7e7aerpluem current instance of the <em>TestString</em>.
bf380c59be3f235bde21f1c00098e09e3cf7e7aerpluem <em>TestString</em> is first evaluated, before being matched against
06ba4a61654b3763ad65f52283832ebf058fdf1cslive <em>CondPattern</em>.</p>
06ba4a61654b3763ad65f52283832ebf058fdf1cslive
88f586e767b7b224bdb1a178455668a2475cfc75rbowen <p><em>CondPattern</em> is usually a
88f586e767b7b224bdb1a178455668a2475cfc75rbowen <em>perl compatible regular expression</em>, but there is
88f586e767b7b224bdb1a178455668a2475cfc75rbowen additional syntax available to perform other useful tests against
88f586e767b7b224bdb1a178455668a2475cfc75rbowen the <em>Teststring</em>:</p>
06ba4a61654b3763ad65f52283832ebf058fdf1cslive
06ba4a61654b3763ad65f52283832ebf058fdf1cslive <ol>
06ba4a61654b3763ad65f52283832ebf058fdf1cslive <li>You can prefix the pattern string with a
06ba4a61654b3763ad65f52283832ebf058fdf1cslive '<code>!</code>' character (exclamation mark) to specify a
06ba4a61654b3763ad65f52283832ebf058fdf1cslive <strong>non</strong>-matching pattern.</li>
06ba4a61654b3763ad65f52283832ebf058fdf1cslive
06ba4a61654b3763ad65f52283832ebf058fdf1cslive <li>
88f586e767b7b224bdb1a178455668a2475cfc75rbowen You can perform lexicographical string comparisons:
06ba4a61654b3763ad65f52283832ebf058fdf1cslive
06ba4a61654b3763ad65f52283832ebf058fdf1cslive <ul>
81785f72c9d133aef57ad6b02f248345d90239aapoirier <li>'<strong>&lt;CondPattern</strong>' (lexicographically
5ae30adbe59946de742ab0cd6be3b7457471a698takashi precedes)<br />
bf380c59be3f235bde21f1c00098e09e3cf7e7aerpluem Treats the <em>CondPattern</em> as a plain string and
bf380c59be3f235bde21f1c00098e09e3cf7e7aerpluem compares it lexicographically to <em>TestString</em>. True if
bf380c59be3f235bde21f1c00098e09e3cf7e7aerpluem <em>TestString</em> lexicographically precedes
06ba4a61654b3763ad65f52283832ebf058fdf1cslive <em>CondPattern</em>.</li>
06ba4a61654b3763ad65f52283832ebf058fdf1cslive
bf380c59be3f235bde21f1c00098e09e3cf7e7aerpluem <li>'<strong>&gt;CondPattern</strong>' (lexicographically
bf380c59be3f235bde21f1c00098e09e3cf7e7aerpluem follows)<br />
bf380c59be3f235bde21f1c00098e09e3cf7e7aerpluem Treats the <em>CondPattern</em> as a plain string and
bf380c59be3f235bde21f1c00098e09e3cf7e7aerpluem compares it lexicographically to <em>TestString</em>. True if
bf380c59be3f235bde21f1c00098e09e3cf7e7aerpluem <em>TestString</em> lexicographically follows
06ba4a61654b3763ad65f52283832ebf058fdf1cslive <em>CondPattern</em>.</li>
06ba4a61654b3763ad65f52283832ebf058fdf1cslive
bf380c59be3f235bde21f1c00098e09e3cf7e7aerpluem <li>'<strong>=CondPattern</strong>' (lexicographically
97a9a944b5887e91042b019776c41d5dd74557aferikabele equal)<br />
bf380c59be3f235bde21f1c00098e09e3cf7e7aerpluem Treats the <em>CondPattern</em> as a plain string and
bf380c59be3f235bde21f1c00098e09e3cf7e7aerpluem compares it lexicographically to <em>TestString</em>. True if
bf380c59be3f235bde21f1c00098e09e3cf7e7aerpluem <em>TestString</em> is lexicographically equal to
bf380c59be3f235bde21f1c00098e09e3cf7e7aerpluem <em>CondPattern</em> (the two strings are exactly
bf380c59be3f235bde21f1c00098e09e3cf7e7aerpluem equal, character for character). If <em>CondPattern</em>
bf380c59be3f235bde21f1c00098e09e3cf7e7aerpluem is <code>""</code> (two quotation marks) this
06ba4a61654b3763ad65f52283832ebf058fdf1cslive compares <em>TestString</em> to the empty string.</li>
06ba4a61654b3763ad65f52283832ebf058fdf1cslive
3b1807171c3f06d8951da1bf23c5f51961c274bbrbowen <li>'<strong>&lt;=CondPattern</strong>' (lexicographically
3b1807171c3f06d8951da1bf23c5f51961c274bbrbowen less than or equal to)<br />
3b1807171c3f06d8951da1bf23c5f51961c274bbrbowen Treats the <em>CondPattern</em> as a plain string and
3b1807171c3f06d8951da1bf23c5f51961c274bbrbowen compares it lexicographically to <em>TestString</em>. True
3b1807171c3f06d8951da1bf23c5f51961c274bbrbowen if <em>TestString</em> lexicographically precedes
3b1807171c3f06d8951da1bf23c5f51961c274bbrbowen <em>CondPattern</em>, or is equal to <em>CondPattern</em>
3b1807171c3f06d8951da1bf23c5f51961c274bbrbowen (the two strings are equal, character for character).</li>
3b1807171c3f06d8951da1bf23c5f51961c274bbrbowen
3b1807171c3f06d8951da1bf23c5f51961c274bbrbowen <li>'<strong>&gt;=CondPattern</strong>' (lexicographically
3b1807171c3f06d8951da1bf23c5f51961c274bbrbowen greater than or equal to)<br />
3b1807171c3f06d8951da1bf23c5f51961c274bbrbowen Treats the <em>CondPattern</em> as a plain string and
3b1807171c3f06d8951da1bf23c5f51961c274bbrbowen compares it lexicographically to <em>TestString</em>. True
3b1807171c3f06d8951da1bf23c5f51961c274bbrbowen if <em>TestString</em> lexicographically follows
3b1807171c3f06d8951da1bf23c5f51961c274bbrbowen <em>CondPattern</em>, or is equal to <em>CondPattern</em>
3b1807171c3f06d8951da1bf23c5f51961c274bbrbowen (the two strings are equal, character for character).</li>
88f586e767b7b224bdb1a178455668a2475cfc75rbowen </ul></li>
3b1807171c3f06d8951da1bf23c5f51961c274bbrbowen
88f586e767b7b224bdb1a178455668a2475cfc75rbowen <li>
88f586e767b7b224bdb1a178455668a2475cfc75rbowen You can perform integer comparisons:
88f586e767b7b224bdb1a178455668a2475cfc75rbowen <ul>
88f586e767b7b224bdb1a178455668a2475cfc75rbowen
88f586e767b7b224bdb1a178455668a2475cfc75rbowen <li>'<strong>-eq</strong>' (is numerically
88f586e767b7b224bdb1a178455668a2475cfc75rbowen <strong>eq</strong>ual to)<br />
88f586e767b7b224bdb1a178455668a2475cfc75rbowen The <em>TestString</em> is treated as an integer, and is
88f586e767b7b224bdb1a178455668a2475cfc75rbowen numerically compared to the <em>CondPattern</em>. True if
88f586e767b7b224bdb1a178455668a2475cfc75rbowen the two are numerically equal.</li>
88f586e767b7b224bdb1a178455668a2475cfc75rbowen
88f586e767b7b224bdb1a178455668a2475cfc75rbowen <li>'<strong>-ge</strong>' (is numerically
88f586e767b7b224bdb1a178455668a2475cfc75rbowen <strong>g</strong>reater than or <strong>e</strong>qual to)<br />
88f586e767b7b224bdb1a178455668a2475cfc75rbowen The <em>TestString</em> is treated as an integer, and is
88f586e767b7b224bdb1a178455668a2475cfc75rbowen numerically compared to the <em>CondPattern</em>. True if
88f586e767b7b224bdb1a178455668a2475cfc75rbowen the <em>TestString</em> is numerically greater than or equal
88f586e767b7b224bdb1a178455668a2475cfc75rbowen to the <em>CondPattern</em>.</li>
9a58dc6a2b26ec128b1270cf48810e705f1a90dbsf
88f586e767b7b224bdb1a178455668a2475cfc75rbowen <li>'<strong>-gt</strong>' (is numerically
88f586e767b7b224bdb1a178455668a2475cfc75rbowen <strong>g</strong>reater <strong>t</strong>han)<br />
88f586e767b7b224bdb1a178455668a2475cfc75rbowen The <em>TestString</em> is treated as an integer, and is
88f586e767b7b224bdb1a178455668a2475cfc75rbowen numerically compared to the <em>CondPattern</em>. True if
88f586e767b7b224bdb1a178455668a2475cfc75rbowen the <em>TestString</em> is numerically greater than
88f586e767b7b224bdb1a178455668a2475cfc75rbowen the <em>CondPattern</em>.</li>
88f586e767b7b224bdb1a178455668a2475cfc75rbowen
88f586e767b7b224bdb1a178455668a2475cfc75rbowen <li>'<strong>-le</strong>' (is numerically
88f586e767b7b224bdb1a178455668a2475cfc75rbowen <strong>l</strong>ess than or <strong>e</strong>qual to)<br />
88f586e767b7b224bdb1a178455668a2475cfc75rbowen The <em>TestString</em> is treated as an integer, and is
88f586e767b7b224bdb1a178455668a2475cfc75rbowen numerically compared to the <em>CondPattern</em>. True if
88f586e767b7b224bdb1a178455668a2475cfc75rbowen the <em>TestString</em> is numerically less than or equal
88f586e767b7b224bdb1a178455668a2475cfc75rbowen to the <em>CondPattern</em>. Avoid confusion with the
88f586e767b7b224bdb1a178455668a2475cfc75rbowen <strong>-l</strong> by using the <strong>-L</strong> or
88f586e767b7b224bdb1a178455668a2475cfc75rbowen <strong>-h</strong> variant.</li>
9a58dc6a2b26ec128b1270cf48810e705f1a90dbsf
88f586e767b7b224bdb1a178455668a2475cfc75rbowen <li>'<strong>-lt</strong>' (is numerically
88f586e767b7b224bdb1a178455668a2475cfc75rbowen <strong>l</strong>ess <strong>t</strong>han)<br />
88f586e767b7b224bdb1a178455668a2475cfc75rbowen The <em>TestString</em> is treated as an integer, and is
88f586e767b7b224bdb1a178455668a2475cfc75rbowen numerically compared to the <em>CondPattern</em>. True if
88f586e767b7b224bdb1a178455668a2475cfc75rbowen the <em>TestString</em> is numerically less than
88f586e767b7b224bdb1a178455668a2475cfc75rbowen the <em>CondPattern</em>. Avoid confusion with the
88f586e767b7b224bdb1a178455668a2475cfc75rbowen <strong>-l</strong> by using the <strong>-L</strong> or
88f586e767b7b224bdb1a178455668a2475cfc75rbowen <strong>-h</strong> variant.</li>
88f586e767b7b224bdb1a178455668a2475cfc75rbowen
88f586e767b7b224bdb1a178455668a2475cfc75rbowen </ul>
88f586e767b7b224bdb1a178455668a2475cfc75rbowen </li>
88f586e767b7b224bdb1a178455668a2475cfc75rbowen
88f586e767b7b224bdb1a178455668a2475cfc75rbowen <li>You can perform various file attribute tests:
88f586e767b7b224bdb1a178455668a2475cfc75rbowen <ul>
06ba4a61654b3763ad65f52283832ebf058fdf1cslive <li>'<strong>-d</strong>' (is
97a9a944b5887e91042b019776c41d5dd74557aferikabele <strong>d</strong>irectory)<br />
06ba4a61654b3763ad65f52283832ebf058fdf1cslive Treats the <em>TestString</em> as a pathname and tests
bf380c59be3f235bde21f1c00098e09e3cf7e7aerpluem whether or not it exists, and is a directory.</li>
06ba4a61654b3763ad65f52283832ebf058fdf1cslive
06ba4a61654b3763ad65f52283832ebf058fdf1cslive <li>'<strong>-f</strong>' (is regular
97a9a944b5887e91042b019776c41d5dd74557aferikabele <strong>f</strong>ile)<br />
06ba4a61654b3763ad65f52283832ebf058fdf1cslive Treats the <em>TestString</em> as a pathname and tests
bf380c59be3f235bde21f1c00098e09e3cf7e7aerpluem whether or not it exists, and is a regular file.</li>
06ba4a61654b3763ad65f52283832ebf058fdf1cslive
bf380c59be3f235bde21f1c00098e09e3cf7e7aerpluem <li>'<strong>-F</strong>' (is existing file, via
97a9a944b5887e91042b019776c41d5dd74557aferikabele subrequest)<br />
bf380c59be3f235bde21f1c00098e09e3cf7e7aerpluem Checks whether or not <em>TestString</em> is a valid file,
06ba4a61654b3763ad65f52283832ebf058fdf1cslive accessible via all the server's currently-configured
06ba4a61654b3763ad65f52283832ebf058fdf1cslive access controls for that path. This uses an internal
bf380c59be3f235bde21f1c00098e09e3cf7e7aerpluem subrequest to do the check, so use it with care -
bf380c59be3f235bde21f1c00098e09e3cf7e7aerpluem it can impact your server's performance!</li>
06ba4a61654b3763ad65f52283832ebf058fdf1cslive
3b1807171c3f06d8951da1bf23c5f51961c274bbrbowen <li>'<strong>-H</strong>' (is symbolic link, bash convention)<br />
3b1807171c3f06d8951da1bf23c5f51961c274bbrbowen See <strong>-l</strong>.</li>
3b1807171c3f06d8951da1bf23c5f51961c274bbrbowen
3b1807171c3f06d8951da1bf23c5f51961c274bbrbowen <li>'<strong>-l</strong>' (is symbolic
3b1807171c3f06d8951da1bf23c5f51961c274bbrbowen <strong>l</strong>ink)<br />
3b1807171c3f06d8951da1bf23c5f51961c274bbrbowen Treats the <em>TestString</em> as a pathname and tests
3b1807171c3f06d8951da1bf23c5f51961c274bbrbowen whether or not it exists, and is a symbolic link. May also
3b1807171c3f06d8951da1bf23c5f51961c274bbrbowen use the bash convention of <strong>-L</strong> or
3b1807171c3f06d8951da1bf23c5f51961c274bbrbowen <strong>-h</strong> if there's a possibility of confusion
88f586e767b7b224bdb1a178455668a2475cfc75rbowen such as when using the <strong>-lt</strong> or
88f586e767b7b224bdb1a178455668a2475cfc75rbowen <strong>-le</strong> tests.</li>
3b1807171c3f06d8951da1bf23c5f51961c274bbrbowen
3b1807171c3f06d8951da1bf23c5f51961c274bbrbowen <li>'<strong>-L</strong>' (is symbolic link, bash convention)<br />
3b1807171c3f06d8951da1bf23c5f51961c274bbrbowen See <strong>-l</strong>.</li>
3b1807171c3f06d8951da1bf23c5f51961c274bbrbowen
3b1807171c3f06d8951da1bf23c5f51961c274bbrbowen <li>'<strong>-s</strong>' (is regular file, with
3b1807171c3f06d8951da1bf23c5f51961c274bbrbowen <strong>s</strong>ize)<br />
3b1807171c3f06d8951da1bf23c5f51961c274bbrbowen Treats the <em>TestString</em> as a pathname and tests
3b1807171c3f06d8951da1bf23c5f51961c274bbrbowen whether or not it exists, and is a regular file with size greater
3b1807171c3f06d8951da1bf23c5f51961c274bbrbowen than zero.</li>
3b1807171c3f06d8951da1bf23c5f51961c274bbrbowen
b0ffb6279db3bd422faeff9a59a43dc762afe148minfrin <li><p>'<strong>-U</strong>' (is existing URL, via
97a9a944b5887e91042b019776c41d5dd74557aferikabele subrequest)<br />
bf380c59be3f235bde21f1c00098e09e3cf7e7aerpluem Checks whether or not <em>TestString</em> is a valid URL,
06ba4a61654b3763ad65f52283832ebf058fdf1cslive accessible via all the server's currently-configured
06ba4a61654b3763ad65f52283832ebf058fdf1cslive access controls for that path. This uses an internal
81785f72c9d133aef57ad6b02f248345d90239aapoirier subrequest to do the check, so use it with care -
b0ffb6279db3bd422faeff9a59a43dc762afe148minfrin it can impact your server's performance!</p>
b0ffb6279db3bd422faeff9a59a43dc762afe148minfrin <p> This flag <em>only</em> returns information about things
b0ffb6279db3bd422faeff9a59a43dc762afe148minfrin like access control, authentication, and authorization. This flag
b0ffb6279db3bd422faeff9a59a43dc762afe148minfrin <em>does not</em> return information about the status code the
b0ffb6279db3bd422faeff9a59a43dc762afe148minfrin configured handler (static file, CGI, proxy, etc.) would have
b0ffb6279db3bd422faeff9a59a43dc762afe148minfrin returned.</p> </li>
3b1807171c3f06d8951da1bf23c5f51961c274bbrbowen
3b1807171c3f06d8951da1bf23c5f51961c274bbrbowen <li>'<strong>-x</strong>' (has e<strong>x</strong>ecutable
3b1807171c3f06d8951da1bf23c5f51961c274bbrbowen permissions)<br />
3b1807171c3f06d8951da1bf23c5f51961c274bbrbowen Treats the <em>TestString</em> as a pathname and tests
3b1807171c3f06d8951da1bf23c5f51961c274bbrbowen whether or not it exists, and has executable permissions.
3b1807171c3f06d8951da1bf23c5f51961c274bbrbowen These permissions are determined according to
3b1807171c3f06d8951da1bf23c5f51961c274bbrbowen the underlying OS.</li>
3b1807171c3f06d8951da1bf23c5f51961c274bbrbowen
06ba4a61654b3763ad65f52283832ebf058fdf1cslive </ul>
06ba4a61654b3763ad65f52283832ebf058fdf1cslive
bf380c59be3f235bde21f1c00098e09e3cf7e7aerpluem<div class="note"><h3>Note:</h3>
06ba4a61654b3763ad65f52283832ebf058fdf1cslive All of these tests can
06ba4a61654b3763ad65f52283832ebf058fdf1cslive also be prefixed by an exclamation mark ('!') to
06ba4a61654b3763ad65f52283832ebf058fdf1cslive negate their meaning.
97a9a944b5887e91042b019776c41d5dd74557aferikabele</div>
06ba4a61654b3763ad65f52283832ebf058fdf1cslive </li>
06ba4a61654b3763ad65f52283832ebf058fdf1cslive
4cb65c31bc681540ea623e1cb2bdd09749fb8d7esf <li>
4cb65c31bc681540ea623e1cb2bdd09749fb8d7esf <p>If the <em>TestString</em> has the special value <code>expr</code>, the
c0c1f9ffbf550e6ba5e60d2d0ee55490794f3aefrbowen <em>CondPattern</em> will be treated as an
4cb65c31bc681540ea623e1cb2bdd09749fb8d7esf <a href="/expr.html">ap_expr</a>.</p>
fa1092e17f0b85a610379ac564334ad879ed7dbarbowen
fa1092e17f0b85a610379ac564334ad879ed7dbarbowen <p>
fa1092e17f0b85a610379ac564334ad879ed7dbarbowen In the below example, <code>-strmatch</code> is used to
fa1092e17f0b85a610379ac564334ad879ed7dbarbowen compare the <code>REFERER</code> against the site hostname,
fa1092e17f0b85a610379ac564334ad879ed7dbarbowen to block unwanted hotlinking.
fa1092e17f0b85a610379ac564334ad879ed7dbarbowen </p>
fa1092e17f0b85a610379ac564334ad879ed7dbarbowen
e9425c93ba098a7844e138a61e1be5f46d2aa2ddnd <pre class="prettyprint lang-config"> RewriteCond expr "! %{HTTP_REFERER} -strmatch '*://%{HTTP_HOST}/*'"<br />
4aa603e6448b99f9371397d439795c91a93637eand RewriteRule ^/images - [F]</pre>
17ade6df5ec233536985eb1c130a906c725dd614humbedooh
4cb65c31bc681540ea623e1cb2bdd09749fb8d7esf </li>
4cb65c31bc681540ea623e1cb2bdd09749fb8d7esf
5ae30adbe59946de742ab0cd6be3b7457471a698takashi <li>You can also set special flags for
bf380c59be3f235bde21f1c00098e09e3cf7e7aerpluem <em>CondPattern</em> by appending
06ba4a61654b3763ad65f52283832ebf058fdf1cslive <strong><code>[</code><em>flags</em><code>]</code></strong>
bf380c59be3f235bde21f1c00098e09e3cf7e7aerpluem as the third argument to the <code>RewriteCond</code>
bf380c59be3f235bde21f1c00098e09e3cf7e7aerpluem directive, where <em>flags</em> is a comma-separated list of any of the
22d5d84393d960a2027f472036f3fee15d7dbce9nd following flags:
06ba4a61654b3763ad65f52283832ebf058fdf1cslive
06ba4a61654b3763ad65f52283832ebf058fdf1cslive <ul>
06ba4a61654b3763ad65f52283832ebf058fdf1cslive <li>'<strong><code>nocase|NC</code></strong>'
97a9a944b5887e91042b019776c41d5dd74557aferikabele (<strong>n</strong>o <strong>c</strong>ase)<br />
81785f72c9d133aef57ad6b02f248345d90239aapoirier This makes the test case-insensitive - differences
5ae30adbe59946de742ab0cd6be3b7457471a698takashi between 'A-Z' and 'a-z' are ignored, both in the
06ba4a61654b3763ad65f52283832ebf058fdf1cslive expanded <em>TestString</em> and the <em>CondPattern</em>.
06ba4a61654b3763ad65f52283832ebf058fdf1cslive This flag is effective only for comparisons between
06ba4a61654b3763ad65f52283832ebf058fdf1cslive <em>TestString</em> and <em>CondPattern</em>. It has no
06ba4a61654b3763ad65f52283832ebf058fdf1cslive effect on filesystem and subrequest checks.</li>
06ba4a61654b3763ad65f52283832ebf058fdf1cslive
06ba4a61654b3763ad65f52283832ebf058fdf1cslive <li>
06ba4a61654b3763ad65f52283832ebf058fdf1cslive '<strong><code>ornext|OR</code></strong>'
97a9a944b5887e91042b019776c41d5dd74557aferikabele (<strong>or</strong> next condition)<br />
bf380c59be3f235bde21f1c00098e09e3cf7e7aerpluem Use this to combine rule conditions with a local OR
81785f72c9d133aef57ad6b02f248345d90239aapoirier instead of the implicit AND. Typical example:
06ba4a61654b3763ad65f52283832ebf058fdf1cslive
4aa603e6448b99f9371397d439795c91a93637eand<pre class="prettyprint lang-config">RewriteCond %{REMOTE_HOST} ^host1 [OR]
025069f3f8c6b59e730a72c229329dfad5a28424rbowenRewriteCond %{REMOTE_HOST} ^host2 [OR]
025069f3f8c6b59e730a72c229329dfad5a28424rbowenRewriteCond %{REMOTE_HOST} ^host3
4aa603e6448b99f9371397d439795c91a93637eandRewriteRule ...some special stuff for any of these hosts...</pre>
17ade6df5ec233536985eb1c130a906c725dd614humbedooh
06ba4a61654b3763ad65f52283832ebf058fdf1cslive
bf380c59be3f235bde21f1c00098e09e3cf7e7aerpluem Without this flag you would have to write the condition/rule
bf380c59be3f235bde21f1c00098e09e3cf7e7aerpluem pair three times.
06ba4a61654b3763ad65f52283832ebf058fdf1cslive </li>
9335f6d807d76d60e54af4ededdebebddb3e3d13noodl
9335f6d807d76d60e54af4ededdebebddb3e3d13noodl <li>'<strong><code>novary|NV</code></strong>'
9335f6d807d76d60e54af4ededdebebddb3e3d13noodl (<strong>n</strong>o <strong>v</strong>ary)<br />
9335f6d807d76d60e54af4ededdebebddb3e3d13noodl If a HTTP header is used in the condition, this flag prevents
9335f6d807d76d60e54af4ededdebebddb3e3d13noodl this header from being added to the Vary header of the response. <br />
9335f6d807d76d60e54af4ededdebebddb3e3d13noodl Using this flag might break proper caching of the response if
9335f6d807d76d60e54af4ededdebebddb3e3d13noodl the representation of this response varies on the value of this header.
9335f6d807d76d60e54af4ededdebebddb3e3d13noodl So this flag should be only used if the meaning of the Vary header
9335f6d807d76d60e54af4ededdebebddb3e3d13noodl is well understood.
9335f6d807d76d60e54af4ededdebebddb3e3d13noodl </li>
06ba4a61654b3763ad65f52283832ebf058fdf1cslive </ul>
22d5d84393d960a2027f472036f3fee15d7dbce9nd </li>
bf380c59be3f235bde21f1c00098e09e3cf7e7aerpluem </ol>
06ba4a61654b3763ad65f52283832ebf058fdf1cslive
06ba4a61654b3763ad65f52283832ebf058fdf1cslive <p><strong>Example:</strong></p>
06ba4a61654b3763ad65f52283832ebf058fdf1cslive
06ba4a61654b3763ad65f52283832ebf058fdf1cslive <p>To rewrite the Homepage of a site according to the
06ba4a61654b3763ad65f52283832ebf058fdf1cslive ``<code>User-Agent:</code>'' header of the request, you can
06ba4a61654b3763ad65f52283832ebf058fdf1cslive use the following: </p>
06ba4a61654b3763ad65f52283832ebf058fdf1cslive
4aa603e6448b99f9371397d439795c91a93637eand<pre class="prettyprint lang-config">RewriteCond %{HTTP_USER_AGENT} (iPhone|Blackberry|Android)
63befe0983261d711e62457b380e24ecc3b7b79etrawickRewriteRule ^/$ /homepage.mobile.html [L]
06ba4a61654b3763ad65f52283832ebf058fdf1cslive
4aa603e6448b99f9371397d439795c91a93637eandRewriteRule ^/$ /homepage.std.html [L]</pre>
17ade6df5ec233536985eb1c130a906c725dd614humbedooh
06ba4a61654b3763ad65f52283832ebf058fdf1cslive
81785f72c9d133aef57ad6b02f248345d90239aapoirier <p>Explanation: If you use a browser which identifies itself
63befe0983261d711e62457b380e24ecc3b7b79etrawick as a mobile browser (note that the example is incomplete, as
63befe0983261d711e62457b380e24ecc3b7b79etrawick there are many other mobile platforms), the mobile version of
63befe0983261d711e62457b380e24ecc3b7b79etrawick the homepage is served. Otherwise, the standard page is served.
63befe0983261d711e62457b380e24ecc3b7b79etrawick </p>
06ba4a61654b3763ad65f52283832ebf058fdf1cslive
0c4abc32c00611fe1d52c9661f5cc79a3f74c6d4nd
0c4abc32c00611fe1d52c9661f5cc79a3f74c6d4nd</div>
0c4abc32c00611fe1d52c9661f5cc79a3f74c6d4nd<div class="top"><a href="#page-header"><img alt="top" src="/images/up.gif" /></a></div>
0c4abc32c00611fe1d52c9661f5cc79a3f74c6d4nd<div class="directive-section"><h2><a name="RewriteEngine" id="RewriteEngine">RewriteEngine</a> <a name="rewriteengine" id="rewriteengine">Directive</a></h2>
0c4abc32c00611fe1d52c9661f5cc79a3f74c6d4nd<table class="directive">
0c4abc32c00611fe1d52c9661f5cc79a3f74c6d4nd<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Enables or disables runtime rewriting engine</td></tr>
0c4abc32c00611fe1d52c9661f5cc79a3f74c6d4nd<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>RewriteEngine on|off</code></td></tr>
0c4abc32c00611fe1d52c9661f5cc79a3f74c6d4nd<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>RewriteEngine off</code></td></tr>
0c4abc32c00611fe1d52c9661f5cc79a3f74c6d4nd<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host, directory, .htaccess</td></tr>
0c4abc32c00611fe1d52c9661f5cc79a3f74c6d4nd<tr><th><a href="directive-dict.html#Override">Override:</a></th><td>FileInfo</td></tr>
0c4abc32c00611fe1d52c9661f5cc79a3f74c6d4nd<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
0c4abc32c00611fe1d52c9661f5cc79a3f74c6d4nd<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_rewrite</td></tr>
81785f72c9d133aef57ad6b02f248345d90239aapoirier</table>
06ba4a61654b3763ad65f52283832ebf058fdf1cslive
06ba4a61654b3763ad65f52283832ebf058fdf1cslive <p>The <code class="directive">RewriteEngine</code> directive enables or
06ba4a61654b3763ad65f52283832ebf058fdf1cslive disables the runtime rewriting engine. If it is set to
06ba4a61654b3763ad65f52283832ebf058fdf1cslive <code>off</code> this module does no runtime processing at
06ba4a61654b3763ad65f52283832ebf058fdf1cslive all. It does not even update the <code>SCRIPT_URx</code>
06ba4a61654b3763ad65f52283832ebf058fdf1cslive environment variables.</p>
06ba4a61654b3763ad65f52283832ebf058fdf1cslive
85c602f69721fc653724a7d1d2b477737502aff1rbowen <p>Use this directive to disable rules in a particular contact,
85c602f69721fc653724a7d1d2b477737502aff1rbowen rather than commenting out all the <code class="directive"><a href="#rewriterule">RewriteRule</a></code> directives.</p>
06ba4a61654b3763ad65f52283832ebf058fdf1cslive
4c36c711036219c80d5517d35be68a4769c15291slive <p>Note that rewrite configurations are not
4c36c711036219c80d5517d35be68a4769c15291slive inherited by virtual hosts. This means that you need to have a
06ba4a61654b3763ad65f52283832ebf058fdf1cslive <code>RewriteEngine on</code> directive for each virtual host
4c36c711036219c80d5517d35be68a4769c15291slive in which you wish to use rewrite rules.</p>
0c4abc32c00611fe1d52c9661f5cc79a3f74c6d4nd
fc9f416faa11879811f17d6efadedbf81cfd52a1covener <p><code class="directive">RewriteMap</code> directives of the type <code>prg</code>
fc9f416faa11879811f17d6efadedbf81cfd52a1covener are not started during server initialization if they're defined in a
fc9f416faa11879811f17d6efadedbf81cfd52a1covener context that does not have <code class="directive">RewriteEngine</code> set to
fc9f416faa11879811f17d6efadedbf81cfd52a1covener <code>on</code></p>
fc9f416faa11879811f17d6efadedbf81cfd52a1covener
0c4abc32c00611fe1d52c9661f5cc79a3f74c6d4nd</div>
0c4abc32c00611fe1d52c9661f5cc79a3f74c6d4nd<div class="top"><a href="#page-header"><img alt="top" src="/images/up.gif" /></a></div>
0c4abc32c00611fe1d52c9661f5cc79a3f74c6d4nd<div class="directive-section"><h2><a name="RewriteMap" id="RewriteMap">RewriteMap</a> <a name="rewritemap" id="rewritemap">Directive</a></h2>
0c4abc32c00611fe1d52c9661f5cc79a3f74c6d4nd<table class="directive">
0c4abc32c00611fe1d52c9661f5cc79a3f74c6d4nd<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Defines a mapping function for key-lookup</td></tr>
0c4abc32c00611fe1d52c9661f5cc79a3f74c6d4nd<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>RewriteMap <em>MapName</em> <em>MapType</em>:<em>MapSource</em>
0c4abc32c00611fe1d52c9661f5cc79a3f74c6d4nd</code></td></tr>
0c4abc32c00611fe1d52c9661f5cc79a3f74c6d4nd<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host</td></tr>
0c4abc32c00611fe1d52c9661f5cc79a3f74c6d4nd<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
0c4abc32c00611fe1d52c9661f5cc79a3f74c6d4nd<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_rewrite</td></tr>
0c4abc32c00611fe1d52c9661f5cc79a3f74c6d4nd</table>
06ba4a61654b3763ad65f52283832ebf058fdf1cslive <p>The <code class="directive">RewriteMap</code> directive defines a
06ba4a61654b3763ad65f52283832ebf058fdf1cslive <em>Rewriting Map</em> which can be used inside rule
06ba4a61654b3763ad65f52283832ebf058fdf1cslive substitution strings by the mapping-functions to
06ba4a61654b3763ad65f52283832ebf058fdf1cslive insert/substitute fields through a key lookup. The source of
06ba4a61654b3763ad65f52283832ebf058fdf1cslive this lookup can be of various types.</p>
06ba4a61654b3763ad65f52283832ebf058fdf1cslive
06ba4a61654b3763ad65f52283832ebf058fdf1cslive <p>The <a id="mapfunc" name="mapfunc"><em>MapName</em></a> is
06ba4a61654b3763ad65f52283832ebf058fdf1cslive the name of the map and will be used to specify a
06ba4a61654b3763ad65f52283832ebf058fdf1cslive mapping-function for the substitution strings of a rewriting
06ba4a61654b3763ad65f52283832ebf058fdf1cslive rule via one of the following constructs:</p>
06ba4a61654b3763ad65f52283832ebf058fdf1cslive
97a9a944b5887e91042b019776c41d5dd74557aferikabele <p class="indent">
06ba4a61654b3763ad65f52283832ebf058fdf1cslive <strong><code>${</code> <em>MapName</em> <code>:</code>
97a9a944b5887e91042b019776c41d5dd74557aferikabele <em>LookupKey</em> <code>}</code><br />
06ba4a61654b3763ad65f52283832ebf058fdf1cslive <code>${</code> <em>MapName</em> <code>:</code>
06ba4a61654b3763ad65f52283832ebf058fdf1cslive <em>LookupKey</em> <code>|</code> <em>DefaultValue</em>
06ba4a61654b3763ad65f52283832ebf058fdf1cslive <code>}</code></strong>
97a9a944b5887e91042b019776c41d5dd74557aferikabele </p>
06ba4a61654b3763ad65f52283832ebf058fdf1cslive
bf380c59be3f235bde21f1c00098e09e3cf7e7aerpluem <p>When such a construct occurs, the map <em>MapName</em> is
06ba4a61654b3763ad65f52283832ebf058fdf1cslive consulted and the key <em>LookupKey</em> is looked-up. If the
06ba4a61654b3763ad65f52283832ebf058fdf1cslive key is found, the map-function construct is substituted by
06ba4a61654b3763ad65f52283832ebf058fdf1cslive <em>SubstValue</em>. If the key is not found then it is
06ba4a61654b3763ad65f52283832ebf058fdf1cslive substituted by <em>DefaultValue</em> or by the empty string
7992de7f9e82ab86effe3dcc5279fb959f6c398dcovener if no <em>DefaultValue</em> was specified. Empty values
7992de7f9e82ab86effe3dcc5279fb959f6c398dcovener behave as if the key was absent, therefore it is not possible
7992de7f9e82ab86effe3dcc5279fb959f6c398dcovener to distinguish between empty-valued keys and absent keys.</p>
06ba4a61654b3763ad65f52283832ebf058fdf1cslive
0ccb6ee166750359937ae35d59c0beb54f8fd228rbowen <p>For example, you might define a
0ccb6ee166750359937ae35d59c0beb54f8fd228rbowen <code class="directive">RewriteMap</code> as:</p>
0ccb6ee166750359937ae35d59c0beb54f8fd228rbowen
20f499565e77defe9dab24dd85c02f38a1175855nd <pre class="prettyprint lang-config">RewriteMap examplemap txt:/path/to/file/map.txt</pre>
17ade6df5ec233536985eb1c130a906c725dd614humbedooh
0ccb6ee166750359937ae35d59c0beb54f8fd228rbowen
0ccb6ee166750359937ae35d59c0beb54f8fd228rbowen <p>You would then be able to use this map in a
0ccb6ee166750359937ae35d59c0beb54f8fd228rbowen <code class="directive">RewriteRule</code> as follows:</p>
0ccb6ee166750359937ae35d59c0beb54f8fd228rbowen
20f499565e77defe9dab24dd85c02f38a1175855nd <pre class="prettyprint lang-config">RewriteRule ^/ex/(.*) ${examplemap:$1}</pre>
17ade6df5ec233536985eb1c130a906c725dd614humbedooh
0ccb6ee166750359937ae35d59c0beb54f8fd228rbowen
06ba4a61654b3763ad65f52283832ebf058fdf1cslive <p>The following combinations for <em>MapType</em> and
06ba4a61654b3763ad65f52283832ebf058fdf1cslive <em>MapSource</em> can be used:</p>
06ba4a61654b3763ad65f52283832ebf058fdf1cslive
790a477f6ce41161c4173c1e5080a1f569976a1erbowen <dl>
790a477f6ce41161c4173c1e5080a1f569976a1erbowen
790a477f6ce41161c4173c1e5080a1f569976a1erbowen <dt>txt</dt>
790a477f6ce41161c4173c1e5080a1f569976a1erbowen <dd>A plain text file containing space-separated key-value
790a477f6ce41161c4173c1e5080a1f569976a1erbowen pairs, one per line. (<a href="/rewrite/rewritemap.html#txt">Details ...</a>)</dd>
790a477f6ce41161c4173c1e5080a1f569976a1erbowen
790a477f6ce41161c4173c1e5080a1f569976a1erbowen <dt>rnd</dt>
790a477f6ce41161c4173c1e5080a1f569976a1erbowen <dd>Randomly selects an entry from a plain text file (<a href="/rewrite/rewritemap.html#rnd">Details ...</a>)</dd>
790a477f6ce41161c4173c1e5080a1f569976a1erbowen
790a477f6ce41161c4173c1e5080a1f569976a1erbowen <dt>dbm</dt>
790a477f6ce41161c4173c1e5080a1f569976a1erbowen <dd>Looks up an entry in a dbm file containing name, value
0a3142725875ea286597e083547d34d98f8c1f2drbowen pairs. Hash is constructed from a plain text file format using
9a58dc6a2b26ec128b1270cf48810e705f1a90dbsf the <code><a href="/programs/httxt2dbm.html">httxt2dbm</a></code>
790a477f6ce41161c4173c1e5080a1f569976a1erbowen utility. (<a href="/rewrite/rewritemap.html#dbm">Details ...</a>)</dd>
0a3142725875ea286597e083547d34d98f8c1f2drbowen
790a477f6ce41161c4173c1e5080a1f569976a1erbowen <dt>int</dt>
e3248eba424ca31b252fbc567032d10082fefd01covener <dd>One of the four available internal functions provided by
e3248eba424ca31b252fbc567032d10082fefd01covener <code>RewriteMap</code>: toupper, tolower, escape or
e3248eba424ca31b252fbc567032d10082fefd01covener unescape. (<a href="/rewrite/rewritemap.html#int">Details ...</a>)</dd>
790a477f6ce41161c4173c1e5080a1f569976a1erbowen
790a477f6ce41161c4173c1e5080a1f569976a1erbowen <dt>prg</dt>
790a477f6ce41161c4173c1e5080a1f569976a1erbowen <dd>Calls an external program or script to process the
790a477f6ce41161c4173c1e5080a1f569976a1erbowen rewriting. (<a href="/rewrite/rewritemap.html#prg">Details ...</a>)</dd>
790a477f6ce41161c4173c1e5080a1f569976a1erbowen
790a477f6ce41161c4173c1e5080a1f569976a1erbowen <dt>dbd or fastdbd</dt>
790a477f6ce41161c4173c1e5080a1f569976a1erbowen <dd>A SQL SELECT statement to be performed to look up the
790a477f6ce41161c4173c1e5080a1f569976a1erbowen rewrite target. (<a href="/rewrite/rewritemap.html#dbd">Details ...</a>)</dd>
790a477f6ce41161c4173c1e5080a1f569976a1erbowen </dl>
0a3142725875ea286597e083547d34d98f8c1f2drbowen
0a3142725875ea286597e083547d34d98f8c1f2drbowen <p>Further details, and numerous examples, may be found in the <a href="/rewrite/rewritemap.html">RewriteMap HowTo</a></p>
06ba4a61654b3763ad65f52283832ebf058fdf1cslive
0c4abc32c00611fe1d52c9661f5cc79a3f74c6d4nd
0c4abc32c00611fe1d52c9661f5cc79a3f74c6d4nd</div>
0c4abc32c00611fe1d52c9661f5cc79a3f74c6d4nd<div class="top"><a href="#page-header"><img alt="top" src="/images/up.gif" /></a></div>
0c4abc32c00611fe1d52c9661f5cc79a3f74c6d4nd<div class="directive-section"><h2><a name="RewriteOptions" id="RewriteOptions">RewriteOptions</a> <a name="rewriteoptions" id="rewriteoptions">Directive</a></h2>
0c4abc32c00611fe1d52c9661f5cc79a3f74c6d4nd<table class="directive">
0c4abc32c00611fe1d52c9661f5cc79a3f74c6d4nd<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Sets some special options for the rewrite engine</td></tr>
0203b896e484dfb877111aceffb812401d0f216and<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>RewriteOptions <var>Options</var></code></td></tr>
0c4abc32c00611fe1d52c9661f5cc79a3f74c6d4nd<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host, directory, .htaccess</td></tr>
0c4abc32c00611fe1d52c9661f5cc79a3f74c6d4nd<tr><th><a href="directive-dict.html#Override">Override:</a></th><td>FileInfo</td></tr>
0c4abc32c00611fe1d52c9661f5cc79a3f74c6d4nd<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
0c4abc32c00611fe1d52c9661f5cc79a3f74c6d4nd<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_rewrite</td></tr>
0c4abc32c00611fe1d52c9661f5cc79a3f74c6d4nd</table>
06ba4a61654b3763ad65f52283832ebf058fdf1cslive
06ba4a61654b3763ad65f52283832ebf058fdf1cslive <p>The <code class="directive">RewriteOptions</code> directive sets some
06ba4a61654b3763ad65f52283832ebf058fdf1cslive special options for the current per-server or per-directory
81785f72c9d133aef57ad6b02f248345d90239aapoirier configuration. The <em>Option</em> string can currently
bf380c59be3f235bde21f1c00098e09e3cf7e7aerpluem only be one of the following:</p>
06ba4a61654b3763ad65f52283832ebf058fdf1cslive
0203b896e484dfb877111aceffb812401d0f216and <dl>
8681ae721fdee17238ebfb7edaeb5c3edc9f1a33nd <dt><code>Inherit</code></dt>
1437d609a6e92c3f32dfdb0d63fce4fd2243fa0frbowen <dd>
9a58dc6a2b26ec128b1270cf48810e705f1a90dbsf
1437d609a6e92c3f32dfdb0d63fce4fd2243fa0frbowen <p>This forces the current configuration to inherit the
bf380c59be3f235bde21f1c00098e09e3cf7e7aerpluem configuration of the parent. In per-virtual-server context,
0203b896e484dfb877111aceffb812401d0f216and this means that the maps, conditions and rules of the main
0203b896e484dfb877111aceffb812401d0f216and server are inherited. In per-directory context this means
0203b896e484dfb877111aceffb812401d0f216and that conditions and rules of the parent directory's
a4d04b8c74044c58bd4182028a1408d936c95951covener <code>.htaccess</code> configuration or
a4d04b8c74044c58bd4182028a1408d936c95951covener <code class="directive"><a href="/mod/core.html#directory">&lt;Directory&gt;</a></code>
a4d04b8c74044c58bd4182028a1408d936c95951covener sections are inherited. The inherited rules are virtually copied
a4d04b8c74044c58bd4182028a1408d936c95951covener to the section where this directive is being used. If used in
a4d04b8c74044c58bd4182028a1408d936c95951covener combination with local rules, the inherited rules are copied behind
a4d04b8c74044c58bd4182028a1408d936c95951covener the local rules. The position of this directive - below or above
a4d04b8c74044c58bd4182028a1408d936c95951covener of local rules - has no influence on this behavior. If local
a4d04b8c74044c58bd4182028a1408d936c95951covener rules forced the rewriting to stop, the inherited rules won't
1437d609a6e92c3f32dfdb0d63fce4fd2243fa0frbowen be processed.</p>
9a58dc6a2b26ec128b1270cf48810e705f1a90dbsf
1437d609a6e92c3f32dfdb0d63fce4fd2243fa0frbowen <div class="warning">
1437d609a6e92c3f32dfdb0d63fce4fd2243fa0frbowen Rules inherited from the parent scope are applied
1437d609a6e92c3f32dfdb0d63fce4fd2243fa0frbowen <strong>after</strong> rules specified in the child scope.
1437d609a6e92c3f32dfdb0d63fce4fd2243fa0frbowen </div>
1437d609a6e92c3f32dfdb0d63fce4fd2243fa0frbowen </dd>
8681ae721fdee17238ebfb7edaeb5c3edc9f1a33nd
8681ae721fdee17238ebfb7edaeb5c3edc9f1a33nd <dt><code>InheritBefore</code></dt>
8681ae721fdee17238ebfb7edaeb5c3edc9f1a33nd <dd>
8681ae721fdee17238ebfb7edaeb5c3edc9f1a33nd <p> Like <code>Inherit</code> above, but the rules from the parent scope
9a58dc6a2b26ec128b1270cf48810e705f1a90dbsf are applied <strong>before</strong> rules specified in the child scope.
8681ae721fdee17238ebfb7edaeb5c3edc9f1a33nd Available in Apache HTTP Server 2.3.10 and later.</p>
8681ae721fdee17238ebfb7edaeb5c3edc9f1a33nd </dd>
9a58dc6a2b26ec128b1270cf48810e705f1a90dbsf
b165cd9d330e6802d439eab70d65e94e5edeacc7nd <dt><code>InheritDown</code></dt>
b165cd9d330e6802d439eab70d65e94e5edeacc7nd <dd>
b165cd9d330e6802d439eab70d65e94e5edeacc7nd
b165cd9d330e6802d439eab70d65e94e5edeacc7nd <p>If this option is enabled, all child configurations will inherit
b165cd9d330e6802d439eab70d65e94e5edeacc7nd the configuration of the current configuration. It is equivalent to
b165cd9d330e6802d439eab70d65e94e5edeacc7nd specifying <code>RewriteOptions Inherit</code> in all child
b165cd9d330e6802d439eab70d65e94e5edeacc7nd configurations. See the <code>Inherit</code> option for more details
b165cd9d330e6802d439eab70d65e94e5edeacc7nd on how the parent-child relationships are handled. Available in Apache
b165cd9d330e6802d439eab70d65e94e5edeacc7nd HTTP Server 2.4.8 and later.</p>
b165cd9d330e6802d439eab70d65e94e5edeacc7nd </dd>
b165cd9d330e6802d439eab70d65e94e5edeacc7nd
b165cd9d330e6802d439eab70d65e94e5edeacc7nd <dt><code>InheritDownBefore</code></dt>
b165cd9d330e6802d439eab70d65e94e5edeacc7nd <dd>
b165cd9d330e6802d439eab70d65e94e5edeacc7nd
b165cd9d330e6802d439eab70d65e94e5edeacc7nd <p>Like <code>InheritDown</code> above, but the rules from the current
b165cd9d330e6802d439eab70d65e94e5edeacc7nd scope are applied <strong>before</strong> rules specified in any child's
b165cd9d330e6802d439eab70d65e94e5edeacc7nd scope. Available in Apache HTTP Server 2.4.8 and later.</p>
b165cd9d330e6802d439eab70d65e94e5edeacc7nd </dd>
b165cd9d330e6802d439eab70d65e94e5edeacc7nd
b165cd9d330e6802d439eab70d65e94e5edeacc7nd <dt><code>IgnoreInherit</code></dt>
b165cd9d330e6802d439eab70d65e94e5edeacc7nd <dd>
b165cd9d330e6802d439eab70d65e94e5edeacc7nd
b165cd9d330e6802d439eab70d65e94e5edeacc7nd <p>This option forces the current and child configurations to ignore
b165cd9d330e6802d439eab70d65e94e5edeacc7nd all rules that would be inherited from a parent specifying
b165cd9d330e6802d439eab70d65e94e5edeacc7nd <code>InheritDown</code> or <code>InheritDownBefore</code>. Available
b165cd9d330e6802d439eab70d65e94e5edeacc7nd in Apache HTTP Server 2.4.8 and later.</p>
b165cd9d330e6802d439eab70d65e94e5edeacc7nd </dd>
b165cd9d330e6802d439eab70d65e94e5edeacc7nd
59877c2b4bb77f563370d7fb238f4a6d7a0e7f44minfrin <dt><code>AllowNoSlash</code></dt>
59877c2b4bb77f563370d7fb238f4a6d7a0e7f44minfrin <dd>
59877c2b4bb77f563370d7fb238f4a6d7a0e7f44minfrin <p>By default, <code class="module"><a href="/mod/mod_rewrite.html">mod_rewrite</a></code> will ignore URLs that map to a
59877c2b4bb77f563370d7fb238f4a6d7a0e7f44minfrin directory on disk but lack a trailing slash, in the expectation that
59877c2b4bb77f563370d7fb238f4a6d7a0e7f44minfrin the <code class="module"><a href="/mod/mod_dir.html">mod_dir</a></code> module will issue the client with a redirect to
59877c2b4bb77f563370d7fb238f4a6d7a0e7f44minfrin the canonical URL with a trailing slash.</p>
59877c2b4bb77f563370d7fb238f4a6d7a0e7f44minfrin
59877c2b4bb77f563370d7fb238f4a6d7a0e7f44minfrin <p>When the <code class="directive"><a href="/mod/mod_dir.html#directoryslash">DirectorySlash</a></code> directive
59877c2b4bb77f563370d7fb238f4a6d7a0e7f44minfrin is set to off, the <code>AllowNoSlash</code> option can be enabled to ensure
59877c2b4bb77f563370d7fb238f4a6d7a0e7f44minfrin that rewrite rules are no longer ignored. This option makes it possible to
59877c2b4bb77f563370d7fb238f4a6d7a0e7f44minfrin apply rewrite rules within .htaccess files that match the directory without
59877c2b4bb77f563370d7fb238f4a6d7a0e7f44minfrin a trailing slash, if so desired. Available in Apache HTTP Server 2.4.0 and
59877c2b4bb77f563370d7fb238f4a6d7a0e7f44minfrin later.</p>
59877c2b4bb77f563370d7fb238f4a6d7a0e7f44minfrin </dd>
59877c2b4bb77f563370d7fb238f4a6d7a0e7f44minfrin
65504e44b3c8bc479260077574b457510708733djorton <dt><code>AllowAnyURI</code></dt>
65504e44b3c8bc479260077574b457510708733djorton <dd>
65504e44b3c8bc479260077574b457510708733djorton
65504e44b3c8bc479260077574b457510708733djorton <p>When <code class="directive"><a href="#rewriterule">RewriteRule</a></code>
65504e44b3c8bc479260077574b457510708733djorton is used in <code>VirtualHost</code> or server context with
65504e44b3c8bc479260077574b457510708733djorton version 2.2.22 or later of httpd, <code class="module"><a href="/mod/mod_rewrite.html">mod_rewrite</a></code>
b6e6d2139d50d64fc4bbd01c4f07d7a4accfec8cnd will only process the rewrite rules if the request URI is a <a href="directive-dict.html#Syntax">URL-path</a>. This avoids
65504e44b3c8bc479260077574b457510708733djorton some security issues where particular rules could allow
65504e44b3c8bc479260077574b457510708733djorton "surprising" pattern expansions (see <a href="http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2011-3368">CVE-2011-3368</a>
65504e44b3c8bc479260077574b457510708733djorton and <a href="http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2011-4317">CVE-2011-4317</a>).
65504e44b3c8bc479260077574b457510708733djorton To lift the restriction on matching a URL-path, the
65504e44b3c8bc479260077574b457510708733djorton <code>AllowAnyURI</code> option can be enabled, and
65504e44b3c8bc479260077574b457510708733djorton <code class="module"><a href="/mod/mod_rewrite.html">mod_rewrite</a></code> will apply the rule set to any
65504e44b3c8bc479260077574b457510708733djorton request URI string, regardless of whether that string matches
65504e44b3c8bc479260077574b457510708733djorton the URL-path grammar required by the HTTP specification.</p>
65504e44b3c8bc479260077574b457510708733djorton
65504e44b3c8bc479260077574b457510708733djorton <div class="warning">
65504e44b3c8bc479260077574b457510708733djorton <h3>Security Warning</h3>
65504e44b3c8bc479260077574b457510708733djorton
65504e44b3c8bc479260077574b457510708733djorton <p>Enabling this option will make the server vulnerable to
65504e44b3c8bc479260077574b457510708733djorton security issues if used with rewrite rules which are not
65504e44b3c8bc479260077574b457510708733djorton carefully authored. It is <strong>strongly recommended</strong>
65504e44b3c8bc479260077574b457510708733djorton that this option is not used. In particular, beware of input
65504e44b3c8bc479260077574b457510708733djorton strings containing the '<code>@</code>' character which could
65504e44b3c8bc479260077574b457510708733djorton change the interpretation of the transformed URI, as per the
65504e44b3c8bc479260077574b457510708733djorton above CVE names.</p>
65504e44b3c8bc479260077574b457510708733djorton </div>
65504e44b3c8bc479260077574b457510708733djorton </dd>
65504e44b3c8bc479260077574b457510708733djorton
acfa9c344a7397239201a2f3047a332af3e13de5covener <dt><code>MergeBase</code></dt>
acfa9c344a7397239201a2f3047a332af3e13de5covener <dd>
acfa9c344a7397239201a2f3047a332af3e13de5covener
acfa9c344a7397239201a2f3047a332af3e13de5covener <p>With this option, the value of <code class="directive"><a href="#rewritebase">RewriteBase</a></code> is copied from where it's explicitly defined
acfa9c344a7397239201a2f3047a332af3e13de5covener into any sub-directory or sub-location that doesn't define its own
acfa9c344a7397239201a2f3047a332af3e13de5covener <code class="directive"><a href="#rewritebase">RewriteBase</a></code>. Available in
acfa9c344a7397239201a2f3047a332af3e13de5covener Apache HTTP Server 2.5 and later only.</p>
acfa9c344a7397239201a2f3047a332af3e13de5covener </dd>
0203b896e484dfb877111aceffb812401d0f216and </dl>
0c4abc32c00611fe1d52c9661f5cc79a3f74c6d4nd
8681ae721fdee17238ebfb7edaeb5c3edc9f1a33nd
0c4abc32c00611fe1d52c9661f5cc79a3f74c6d4nd</div>
0c4abc32c00611fe1d52c9661f5cc79a3f74c6d4nd<div class="top"><a href="#page-header"><img alt="top" src="/images/up.gif" /></a></div>
0c4abc32c00611fe1d52c9661f5cc79a3f74c6d4nd<div class="directive-section"><h2><a name="RewriteRule" id="RewriteRule">RewriteRule</a> <a name="rewriterule" id="rewriterule">Directive</a></h2>
0c4abc32c00611fe1d52c9661f5cc79a3f74c6d4nd<table class="directive">
0c4abc32c00611fe1d52c9661f5cc79a3f74c6d4nd<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Defines rules for the rewriting engine</td></tr>
0c4abc32c00611fe1d52c9661f5cc79a3f74c6d4nd<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>RewriteRule
96147932f199be4ad038778e702c13a2f79051c0slive <em>Pattern</em> <em>Substitution</em> [<em>flags</em>]</code></td></tr>
0c4abc32c00611fe1d52c9661f5cc79a3f74c6d4nd<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host, directory, .htaccess</td></tr>
0c4abc32c00611fe1d52c9661f5cc79a3f74c6d4nd<tr><th><a href="directive-dict.html#Override">Override:</a></th><td>FileInfo</td></tr>
0c4abc32c00611fe1d52c9661f5cc79a3f74c6d4nd<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
0c4abc32c00611fe1d52c9661f5cc79a3f74c6d4nd<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_rewrite</td></tr>
0c4abc32c00611fe1d52c9661f5cc79a3f74c6d4nd</table>
06ba4a61654b3763ad65f52283832ebf058fdf1cslive <p>The <code class="directive">RewriteRule</code> directive is the real
81785f72c9d133aef57ad6b02f248345d90239aapoirier rewriting workhorse. The directive can occur more than once,
bf380c59be3f235bde21f1c00098e09e3cf7e7aerpluem with each instance defining a single rewrite rule. The
bf380c59be3f235bde21f1c00098e09e3cf7e7aerpluem order in which these rules are defined is important - this is the order
bf380c59be3f235bde21f1c00098e09e3cf7e7aerpluem in which they will be applied at run-time.</p>
06ba4a61654b3763ad65f52283832ebf058fdf1cslive
630c456b6461158be6cc5c5483735e27b13b4ad5nd <p><a id="patterns" name="patterns"><em>Pattern</em></a> is
630c456b6461158be6cc5c5483735e27b13b4ad5nd a perl compatible <a id="regexp" name="regexp">regular
6b08bfc19ff8dc826d9ca7ef6446883e2b2d59d9humbedooh expression</a>. On the first RewriteRule, it is matched against
b6e6d2139d50d64fc4bbd01c4f07d7a4accfec8cnd the (%-decoded) <a href="directive-dict.html#Syntax">URL-path</a> (or
b6e6d2139d50d64fc4bbd01c4f07d7a4accfec8cnd <a href="directive-dict.html#Syntax">file-path</a>, depending
6b08bfc19ff8dc826d9ca7ef6446883e2b2d59d9humbedooh on the context) of the request. Subsequent patterns are matched against the
6b08bfc19ff8dc826d9ca7ef6446883e2b2d59d9humbedooh output of the last matching RewriteRule.</p>
06ba4a61654b3763ad65f52283832ebf058fdf1cslive
81fb9d8829c87f498aad9ae764e98d1f60fbfd1crbowen<div class="note"><h3><a id="what_is_matched" name="what_is_matched">What is matched?</a></h3>
9a58dc6a2b26ec128b1270cf48810e705f1a90dbsf <p>In <code class="directive"><a href="/mod/core.html#virtualhost">VirtualHost</a></code> context,
9560125bd44b9d138cb67884b1884401edb1eb85covener The <em>Pattern</em> will initially be matched against the part of the
9560125bd44b9d138cb67884b1884401edb1eb85covener URL after the hostname and port, and before the query string (e.g. "/app1/index.html").</p>
9560125bd44b9d138cb67884b1884401edb1eb85covener
9560125bd44b9d138cb67884b1884401edb1eb85covener <p>In <code class="directive"><a href="/mod/core.html#directory">Directory</a></code> and htaccess context,
9a58dc6a2b26ec128b1270cf48810e705f1a90dbsf the <em>Pattern</em> will initially be matched against the
1af5b3cdeb6ecec4d86786952d2e1ac06284180ehumbedooh <em>filesystem</em> path, after removing the prefix that led the server
9a58dc6a2b26ec128b1270cf48810e705f1a90dbsf to the current <code class="directive">RewriteRule</code> (e.g. "app1/index.html"
9560125bd44b9d138cb67884b1884401edb1eb85covener or "index.html" depending on where the directives are defined).</p>
9a58dc6a2b26ec128b1270cf48810e705f1a90dbsf
e619b7228ac42d9c70d6a5f02d808b0d2880080ccovener <p>If you wish to match against the hostname, port, or query string, use a
96147932f199be4ad038778e702c13a2f79051c0slive <code class="directive"><a href="#rewritecond">RewriteCond</a></code> with the
96147932f199be4ad038778e702c13a2f79051c0slive <code>%{HTTP_HOST}</code>, <code>%{SERVER_PORT}</code>, or
9560125bd44b9d138cb67884b1884401edb1eb85covener <code>%{QUERY_STRING}</code> variables respectively.</p>
e619b7228ac42d9c70d6a5f02d808b0d2880080ccovener
9560125bd44b9d138cb67884b1884401edb1eb85covener</div>
9560125bd44b9d138cb67884b1884401edb1eb85covener
9560125bd44b9d138cb67884b1884401edb1eb85covener<div class="note"><h3>Per-directory Rewrites</h3>
9560125bd44b9d138cb67884b1884401edb1eb85covener<ul>
9dd0b961340554104e5b6e837ddb3101f843cc3fcovener<li>The rewrite engine may be used in <a href="/howto/htaccess.html">.htaccess</a> files and in <code class="directive"><a href="/mod/core.html#directory">&lt;Directory&gt;</a></code> sections, with some additional
9560125bd44b9d138cb67884b1884401edb1eb85covenercomplexity.</li>
9560125bd44b9d138cb67884b1884401edb1eb85covener
9560125bd44b9d138cb67884b1884401edb1eb85covener<li>To enable the rewrite engine in this context, you need to set
9560125bd44b9d138cb67884b1884401edb1eb85covener"<code>RewriteEngine On</code>" <strong>and</strong>
9560125bd44b9d138cb67884b1884401edb1eb85covener"<code>Options FollowSymLinks</code>" must be enabled. If your
9560125bd44b9d138cb67884b1884401edb1eb85coveneradministrator has disabled override of <code>FollowSymLinks</code> for
9560125bd44b9d138cb67884b1884401edb1eb85covenera user's directory, then you cannot use the rewrite engine. This
9560125bd44b9d138cb67884b1884401edb1eb85covenerrestriction is required for security reasons.</li>
9560125bd44b9d138cb67884b1884401edb1eb85covener
9560125bd44b9d138cb67884b1884401edb1eb85covener<li>When using the rewrite engine in <code>.htaccess</code> files the
9560125bd44b9d138cb67884b1884401edb1eb85covenerper-directory prefix (which always is the same for a specific
9560125bd44b9d138cb67884b1884401edb1eb85covenerdirectory) is automatically <em>removed</em> for the RewriteRule pattern matching
9560125bd44b9d138cb67884b1884401edb1eb85covenerand automatically <em>added</em> after any relative (not starting with a
9a58dc6a2b26ec128b1270cf48810e705f1a90dbsfslash or protocol name) substitution encounters the end of a rule set.
9a58dc6a2b26ec128b1270cf48810e705f1a90dbsfSee the <code class="directive"><a href="#rewritebase">RewriteBase</a></code>
9a58dc6a2b26ec128b1270cf48810e705f1a90dbsfdirective for more information regarding what prefix will be added back to
e17931dbd4d310bc2e70bccce1434c181f5b8888rbowenrelative substitutions.</li>
9560125bd44b9d138cb67884b1884401edb1eb85covener
9a58dc6a2b26ec128b1270cf48810e705f1a90dbsf<li> If you wish to match against the full URL-path in a per-directory
9560125bd44b9d138cb67884b1884401edb1eb85covener(htaccess) RewriteRule, use the <code>%{REQUEST_URI}</code> variable in
9560125bd44b9d138cb67884b1884401edb1eb85covenera <code class="directive">RewriteCond</code>.</li>
9560125bd44b9d138cb67884b1884401edb1eb85covener
9560125bd44b9d138cb67884b1884401edb1eb85covener<li>The removed prefix always ends with a slash, meaning the matching occurs against a string which
9dd0b961340554104e5b6e837ddb3101f843cc3fcovener<em>never</em> has a leading slash. Therefore, a <em>Pattern</em> with <code>^/</code> never
9560125bd44b9d138cb67884b1884401edb1eb85covenermatches in per-directory context.</li>
9560125bd44b9d138cb67884b1884401edb1eb85covener
9560125bd44b9d138cb67884b1884401edb1eb85covener<li>Although rewrite rules are syntactically permitted in <code class="directive"><a href="/mod/core.html#location">&lt;Location&gt;</a></code> and <code class="directive"><a href="/mod/core.html#files">&lt;Files&gt;</a></code> sections, this
9560125bd44b9d138cb67884b1884401edb1eb85covenershould never be necessary and is unsupported.</li>
9560125bd44b9d138cb67884b1884401edb1eb85covener</ul>
96147932f199be4ad038778e702c13a2f79051c0slive</div>
96147932f199be4ad038778e702c13a2f79051c0slive
70f2730533c8592263435354e66d9dbaf4d6361bslive <p>For some hints on <a class="glossarylink" href="/glossary.html#regex" title="see glossary">regular
70f2730533c8592263435354e66d9dbaf4d6361bslive expressions</a>, see
1093a264c81aa1041581ab059905fb8f7cdfc5e2rbowen the <a href="/rewrite/intro.html#regex">mod_rewrite
70f2730533c8592263435354e66d9dbaf4d6361bslive Introduction</a>.</p>
06ba4a61654b3763ad65f52283832ebf058fdf1cslive
5ae30adbe59946de742ab0cd6be3b7457471a698takashi <p>In mod_rewrite, the NOT character
81785f72c9d133aef57ad6b02f248345d90239aapoirier ('<code>!</code>') is also available as a possible pattern
bf380c59be3f235bde21f1c00098e09e3cf7e7aerpluem prefix. This enables you to negate a pattern; to say, for instance:
06ba4a61654b3763ad65f52283832ebf058fdf1cslive ``<em>if the current URL does <strong>NOT</strong> match this
06ba4a61654b3763ad65f52283832ebf058fdf1cslive pattern</em>''. This can be used for exceptional cases, where
06ba4a61654b3763ad65f52283832ebf058fdf1cslive it is easier to match the negative pattern, or as a last
06ba4a61654b3763ad65f52283832ebf058fdf1cslive default rule.</p>
06ba4a61654b3763ad65f52283832ebf058fdf1cslive
bf380c59be3f235bde21f1c00098e09e3cf7e7aerpluem<div class="note"><h3>Note</h3>
81785f72c9d133aef57ad6b02f248345d90239aapoirierWhen using the NOT character to negate a pattern, you cannot include
81785f72c9d133aef57ad6b02f248345d90239aapoiriergrouped wildcard parts in that pattern. This is because, when the
81785f72c9d133aef57ad6b02f248345d90239aapoirierpattern does NOT match (ie, the negation matches), there are no
bf380c59be3f235bde21f1c00098e09e3cf7e7aerpluemcontents for the groups. Thus, if negated patterns are used, you
bf380c59be3f235bde21f1c00098e09e3cf7e7aerpluemcannot use <code>$N</code> in the substitution string!
97a9a944b5887e91042b019776c41d5dd74557aferikabele</div>
06ba4a61654b3763ad65f52283832ebf058fdf1cslive
96147932f199be4ad038778e702c13a2f79051c0slive <p>The <a id="rhs" name="rhs"><em>Substitution</em></a> of a
96147932f199be4ad038778e702c13a2f79051c0slive rewrite rule is the string that replaces the original URL-path that
96147932f199be4ad038778e702c13a2f79051c0slive was matched by <em>Pattern</em>. The <em>Substitution</em> may
96147932f199be4ad038778e702c13a2f79051c0slive be a:</p>
96147932f199be4ad038778e702c13a2f79051c0slive
96147932f199be4ad038778e702c13a2f79051c0slive <dl>
96147932f199be4ad038778e702c13a2f79051c0slive
96147932f199be4ad038778e702c13a2f79051c0slive <dt>file-system path</dt>
96147932f199be4ad038778e702c13a2f79051c0slive
96147932f199be4ad038778e702c13a2f79051c0slive <dd>Designates the location on the file-system of the resource
b43f840409794ed298e8634f6284741f193b6c4ftakashi to be delivered to the client. Substitutions are only
b43f840409794ed298e8634f6284741f193b6c4ftakashi treated as a file-system path when the rule is configured in
b43f840409794ed298e8634f6284741f193b6c4ftakashi server (virtualhost) context and the first component of the
eddb8d5753d1ade07e2424f41d860975079443e0humbedooh path in the substitution exists in the file-system</dd>
96147932f199be4ad038778e702c13a2f79051c0slive
81785f72c9d133aef57ad6b02f248345d90239aapoirier <dt>URL-path</dt>
96147932f199be4ad038778e702c13a2f79051c0slive
96147932f199be4ad038778e702c13a2f79051c0slive <dd>A <code class="directive"><a href="/mod/core.html#documentroot">DocumentRoot</a></code>-relative path to the
96147932f199be4ad038778e702c13a2f79051c0slive resource to be served. Note that <code class="module"><a href="/mod/mod_rewrite.html">mod_rewrite</a></code>
96147932f199be4ad038778e702c13a2f79051c0slive tries to guess whether you have specified a file-system path
e00def5e805da9a73b72ad25dac664f0c8c36c2end or a URL-path by checking to see if the first segment of the
96147932f199be4ad038778e702c13a2f79051c0slive path exists at the root of the file-system. For example, if
96147932f199be4ad038778e702c13a2f79051c0slive you specify a <em>Substitution</em> string of
96147932f199be4ad038778e702c13a2f79051c0slive <code>/www/file.html</code>, then this will be treated as a
96147932f199be4ad038778e702c13a2f79051c0slive URL-path <em>unless</em> a directory named <code>www</code>
e6342815b6b2be821ab51f5e867e210b47203429humbedooh exists at the root or your file-system (or, in the case of
e6342815b6b2be821ab51f5e867e210b47203429humbedooh using rewrites in a <code>.htaccess</code> file, relative to
e6342815b6b2be821ab51f5e867e210b47203429humbedooh your document root), in which case it will
96147932f199be4ad038778e702c13a2f79051c0slive be treated as a file-system path. If you wish other
96147932f199be4ad038778e702c13a2f79051c0slive URL-mapping directives (such as <code class="directive"><a href="/mod/mod_alias.html#alias">Alias</a></code>) to be applied to the
96147932f199be4ad038778e702c13a2f79051c0slive resulting URL-path, use the <code>[PT]</code> flag as
96147932f199be4ad038778e702c13a2f79051c0slive described below.</dd>
96147932f199be4ad038778e702c13a2f79051c0slive
96147932f199be4ad038778e702c13a2f79051c0slive <dt>Absolute URL</dt>
96147932f199be4ad038778e702c13a2f79051c0slive
96147932f199be4ad038778e702c13a2f79051c0slive <dd>If an absolute URL is specified,
96147932f199be4ad038778e702c13a2f79051c0slive <code class="module"><a href="/mod/mod_rewrite.html">mod_rewrite</a></code> checks to see whether the
96147932f199be4ad038778e702c13a2f79051c0slive hostname matches the current host. If it does, the scheme and
96147932f199be4ad038778e702c13a2f79051c0slive hostname are stripped out and the resulting path is treated as
96147932f199be4ad038778e702c13a2f79051c0slive a URL-path. Otherwise, an external redirect is performed for
96147932f199be4ad038778e702c13a2f79051c0slive the given URL. To force an external redirect back to the
96147932f199be4ad038778e702c13a2f79051c0slive current host, see the <code>[R]</code> flag below.</dd>
96147932f199be4ad038778e702c13a2f79051c0slive
96147932f199be4ad038778e702c13a2f79051c0slive <dt><code>-</code> (dash)</dt>
96147932f199be4ad038778e702c13a2f79051c0slive
96147932f199be4ad038778e702c13a2f79051c0slive <dd>A dash indicates that no substitution should be performed
96147932f199be4ad038778e702c13a2f79051c0slive (the existing path is passed through untouched). This is used
96147932f199be4ad038778e702c13a2f79051c0slive when a flag (see below) needs to be applied without changing
e3248eba424ca31b252fbc567032d10082fefd01covener the path.</dd>
96147932f199be4ad038778e702c13a2f79051c0slive
96147932f199be4ad038778e702c13a2f79051c0slive </dl>
96147932f199be4ad038778e702c13a2f79051c0slive
e17931dbd4d310bc2e70bccce1434c181f5b8888rbowen <p>In addition to plain text, the <em>Substitution</em> string can include</p>
06ba4a61654b3763ad65f52283832ebf058fdf1cslive
06ba4a61654b3763ad65f52283832ebf058fdf1cslive <ol>
bf380c59be3f235bde21f1c00098e09e3cf7e7aerpluem <li>back-references (<code>$N</code>) to the RewriteRule
06ba4a61654b3763ad65f52283832ebf058fdf1cslive pattern</li>
06ba4a61654b3763ad65f52283832ebf058fdf1cslive
bf380c59be3f235bde21f1c00098e09e3cf7e7aerpluem <li>back-references (<code>%N</code>) to the last matched
06ba4a61654b3763ad65f52283832ebf058fdf1cslive RewriteCond pattern</li>
06ba4a61654b3763ad65f52283832ebf058fdf1cslive
06ba4a61654b3763ad65f52283832ebf058fdf1cslive <li>server-variables as in rule condition test-strings
06ba4a61654b3763ad65f52283832ebf058fdf1cslive (<code>%{VARNAME}</code>)</li>
06ba4a61654b3763ad65f52283832ebf058fdf1cslive
06ba4a61654b3763ad65f52283832ebf058fdf1cslive <li><a href="#mapfunc">mapping-function</a> calls
06ba4a61654b3763ad65f52283832ebf058fdf1cslive (<code>${mapname:key|default}</code>)</li>
06ba4a61654b3763ad65f52283832ebf058fdf1cslive </ol>
96147932f199be4ad038778e702c13a2f79051c0slive
81785f72c9d133aef57ad6b02f248345d90239aapoirier <p>Back-references are identifiers of the form
5ae30adbe59946de742ab0cd6be3b7457471a698takashi <code>$</code><strong>N</strong>
bf380c59be3f235bde21f1c00098e09e3cf7e7aerpluem (<strong>N</strong>=0..9), which will be replaced
06ba4a61654b3763ad65f52283832ebf058fdf1cslive by the contents of the <strong>N</strong>th group of the
06ba4a61654b3763ad65f52283832ebf058fdf1cslive matched <em>Pattern</em>. The server-variables are the same
06ba4a61654b3763ad65f52283832ebf058fdf1cslive as for the <em>TestString</em> of a <code>RewriteCond</code>
06ba4a61654b3763ad65f52283832ebf058fdf1cslive directive. The mapping-functions come from the
06ba4a61654b3763ad65f52283832ebf058fdf1cslive <code>RewriteMap</code> directive and are explained there.
bf380c59be3f235bde21f1c00098e09e3cf7e7aerpluem These three types of variables are expanded in the order above.</p>
06ba4a61654b3763ad65f52283832ebf058fdf1cslive
3bd4f2a469a28a479ba4336e0494802697e67e6arbowen <p>Rewrite rules are applied to the results of previous rewrite
3bd4f2a469a28a479ba4336e0494802697e67e6arbowen rules, in the order in which they are defined
198ed7e689ada03d3236a3d0e709245d2b07dfa2humbedooh in the config file. The URL-path or file-system path (see <a href="#what_is_matched">"What is matched?"</a>, above) is <strong>completely
06ba4a61654b3763ad65f52283832ebf058fdf1cslive replaced</strong> by the <em>Substitution</em> and the
bf380c59be3f235bde21f1c00098e09e3cf7e7aerpluem rewriting process continues until all rules have been applied,
81fb9d8829c87f498aad9ae764e98d1f60fbfd1crbowen or it is explicitly terminated by an
3bd4f2a469a28a479ba4336e0494802697e67e6arbowen <a href="/rewrite/flags.html#flag_l"><code><strong>L</strong></code> flag</a>,
3bd4f2a469a28a479ba4336e0494802697e67e6arbowen or other flag which implies immediate termination, such as
3bd4f2a469a28a479ba4336e0494802697e67e6arbowen <code><strong>END</strong></code> or
3bd4f2a469a28a479ba4336e0494802697e67e6arbowen <code><strong>F</strong></code>.</p>
06ba4a61654b3763ad65f52283832ebf058fdf1cslive
96147932f199be4ad038778e702c13a2f79051c0slive <div class="note"><h3>Modifying the Query String</h3>
96147932f199be4ad038778e702c13a2f79051c0slive <p>By default, the query string is passed through unchanged. You
96147932f199be4ad038778e702c13a2f79051c0slive can, however, create URLs in the substitution string containing
96147932f199be4ad038778e702c13a2f79051c0slive a query string part. Simply use a question mark inside the
96147932f199be4ad038778e702c13a2f79051c0slive substitution string to indicate that the following text should
96147932f199be4ad038778e702c13a2f79051c0slive be re-injected into the query string. When you want to erase an
96147932f199be4ad038778e702c13a2f79051c0slive existing query string, end the substitution string with just a
96147932f199be4ad038778e702c13a2f79051c0slive question mark. To combine new and old query strings, use the
81785f72c9d133aef57ad6b02f248345d90239aapoirier <code>[QSA]</code> flag.</p>
96147932f199be4ad038778e702c13a2f79051c0slive </div>
70373b9ee042e7b3be82eee14b17f510fffdacc9slive
81785f72c9d133aef57ad6b02f248345d90239aapoirier <p>Additionally you can set special <a name="rewriteflags" id="rewriteflags">actions</a> to be performed by
bf380c59be3f235bde21f1c00098e09e3cf7e7aerpluem appending <strong><code>[</code><em>flags</em><code>]</code></strong>
06ba4a61654b3763ad65f52283832ebf058fdf1cslive as the third argument to the <code>RewriteRule</code>
81785f72c9d133aef57ad6b02f248345d90239aapoirier directive. <em>Flags</em> is a comma-separated list, surround by square
ee9cda8f648f99a0b889cb0831ba5b1efe6b3eb5rbowen brackets, of any of the flags in the following table. More
545fa9d9188f1ae00e785e784f23e1f0a62b7c25sf details, and examples, for each flag, are available in the <a href="/rewrite/flags.html">Rewrite Flags document</a>.</p>
ee9cda8f648f99a0b889cb0831ba5b1efe6b3eb5rbowen
34212fdb21f03f4e180a3226f83e39af0371d7dbrbowen <table class="bordered">
545fa9d9188f1ae00e785e784f23e1f0a62b7c25sf <tr><th>Flag and syntax</th>
ee9cda8f648f99a0b889cb0831ba5b1efe6b3eb5rbowen <th>Function</th>
ee9cda8f648f99a0b889cb0831ba5b1efe6b3eb5rbowen </tr>
ee9cda8f648f99a0b889cb0831ba5b1efe6b3eb5rbowen <tr>
ee9cda8f648f99a0b889cb0831ba5b1efe6b3eb5rbowen <td>B</td>
5da2e4f5e41a00d71f69d6731cb5071a323c5b0dnd <td>Escape non-alphanumeric characters in backreferences <em>before</em>
5da2e4f5e41a00d71f69d6731cb5071a323c5b0dnd applying the transformation. <em><a href="/rewrite/flags.html#flag_b">details ...</a></em></td>
ee9cda8f648f99a0b889cb0831ba5b1efe6b3eb5rbowen </tr>
835a0969a388f55dcf3ce0f606c8221be5a9c9becovener <tr>
835a0969a388f55dcf3ce0f606c8221be5a9c9becovener <td>backrefnoplus|BNP</td>
835a0969a388f55dcf3ce0f606c8221be5a9c9becovener <td>If backreferences are being escaped, spaces should be escaped to
835a0969a388f55dcf3ce0f606c8221be5a9c9becovener %20 instead of +. Useful when the backreference will be used in the
835a0969a388f55dcf3ce0f606c8221be5a9c9becovener path component rather than the query string.<em><a href="/rewrite/flags.html#flag_bnp">details ...</a></em></td>
835a0969a388f55dcf3ce0f606c8221be5a9c9becovener </tr>
835a0969a388f55dcf3ce0f606c8221be5a9c9becovener
ee9cda8f648f99a0b889cb0831ba5b1efe6b3eb5rbowen <tr>
ee9cda8f648f99a0b889cb0831ba5b1efe6b3eb5rbowen <td>chain|C</td>
ee9cda8f648f99a0b889cb0831ba5b1efe6b3eb5rbowen <td>Rule is chained to the following rule. If the rule fails,
ee9cda8f648f99a0b889cb0831ba5b1efe6b3eb5rbowen the rule(s) chained to it will be skipped. <em><a href="/rewrite/flags.html#flag_c">details ...</a></em></td>
ee9cda8f648f99a0b889cb0831ba5b1efe6b3eb5rbowen </tr>
ee9cda8f648f99a0b889cb0831ba5b1efe6b3eb5rbowen <tr>
ee9cda8f648f99a0b889cb0831ba5b1efe6b3eb5rbowen <td>cookie|CO=<em>NAME</em>:<em>VAL</em></td>
9a58dc6a2b26ec128b1270cf48810e705f1a90dbsf <td>Sets a cookie in the client browser. Full syntax is:
65a3fea479371d1bd7a25f39e95c00fd38c02ed9rbowen CO=<em>NAME</em>:<em>VAL</em>:<em>domain</em>[:<em>lifetime</em>[:<em>path</em>[:<em>secure</em>[:<em>httponly</em>]]]] <em><a href="/rewrite/flags.html#flag_co">details ...</a></em>
ee9cda8f648f99a0b889cb0831ba5b1efe6b3eb5rbowen </td>
ee9cda8f648f99a0b889cb0831ba5b1efe6b3eb5rbowen </tr>
ee9cda8f648f99a0b889cb0831ba5b1efe6b3eb5rbowen <tr>
590742c95db6e12a810030a36b295271f3228e31rbowen <td>discardpath|DPI</td>
ee9cda8f648f99a0b889cb0831ba5b1efe6b3eb5rbowen <td>Causes the PATH_INFO portion of the rewritten URI to be
9a58dc6a2b26ec128b1270cf48810e705f1a90dbsf discarded. <em><a href="/rewrite/flags.html#flag_dpi">details
ee9cda8f648f99a0b889cb0831ba5b1efe6b3eb5rbowen ...</a></em></td>
ee9cda8f648f99a0b889cb0831ba5b1efe6b3eb5rbowen </tr>
672ca0442b25e6241cd879a6fab71a90d46ba1bdrbowen <tr>
672ca0442b25e6241cd879a6fab71a90d46ba1bdrbowen <td>END</td>
672ca0442b25e6241cd879a6fab71a90d46ba1bdrbowen <td>Stop the rewriting process immediately and don't apply any
672ca0442b25e6241cd879a6fab71a90d46ba1bdrbowen more rules. Also prevents further execution of rewrite rules
672ca0442b25e6241cd879a6fab71a90d46ba1bdrbowen in per-directory and .htaccess context. (Available in 2.3.9 and later)
672ca0442b25e6241cd879a6fab71a90d46ba1bdrbowen <em><a href="/rewrite/flags.html#flag_end">details ...</a></em></td>
672ca0442b25e6241cd879a6fab71a90d46ba1bdrbowen </tr>
ee9cda8f648f99a0b889cb0831ba5b1efe6b3eb5rbowen <tr>
4cb65c31bc681540ea623e1cb2bdd09749fb8d7esf <td>env|E=[!]<em>VAR</em>[:<em>VAL</em>]</td>
39d67f66729a7008c1e73d65a81e778ce819a227rjung <td>Causes an environment variable <em>VAR</em> to be set (to the
4cb65c31bc681540ea623e1cb2bdd09749fb8d7esf value <em>VAL</em> if provided). The form !<em>VAR</em> causes
672ca0442b25e6241cd879a6fab71a90d46ba1bdrbowen the environment variable <em>VAR</em> to be unset.
672ca0442b25e6241cd879a6fab71a90d46ba1bdrbowen <em><a href="/rewrite/flags.html#flag_e">details ...</a></em></td>
ee9cda8f648f99a0b889cb0831ba5b1efe6b3eb5rbowen </tr>
ee9cda8f648f99a0b889cb0831ba5b1efe6b3eb5rbowen <tr>
ee9cda8f648f99a0b889cb0831ba5b1efe6b3eb5rbowen <td>forbidden|F</td>
ee9cda8f648f99a0b889cb0831ba5b1efe6b3eb5rbowen <td>Returns a 403 FORBIDDEN response to the client browser.
ee9cda8f648f99a0b889cb0831ba5b1efe6b3eb5rbowen <em><a href="/rewrite/flags.html#flag_f">details ...</a></em></td>
ee9cda8f648f99a0b889cb0831ba5b1efe6b3eb5rbowen </tr>
ee9cda8f648f99a0b889cb0831ba5b1efe6b3eb5rbowen <tr>
ee9cda8f648f99a0b889cb0831ba5b1efe6b3eb5rbowen <td>gone|G</td>
ee9cda8f648f99a0b889cb0831ba5b1efe6b3eb5rbowen <td>Returns a 410 GONE response to the client browser. <em><a href="/rewrite/flags.html#flag_g">details ...</a></em></td>
ee9cda8f648f99a0b889cb0831ba5b1efe6b3eb5rbowen </tr>
ee9cda8f648f99a0b889cb0831ba5b1efe6b3eb5rbowen <tr>
ee9cda8f648f99a0b889cb0831ba5b1efe6b3eb5rbowen <td>Handler|H=<em>Content-handler</em></td>
ee9cda8f648f99a0b889cb0831ba5b1efe6b3eb5rbowen <td>Causes the resulting URI to be sent to the specified
ee9cda8f648f99a0b889cb0831ba5b1efe6b3eb5rbowen <em>Content-handler</em> for processing. <em><a href="/rewrite/flags.html#flag_h">details ...</a></em></td>
ee9cda8f648f99a0b889cb0831ba5b1efe6b3eb5rbowen </tr>
ee9cda8f648f99a0b889cb0831ba5b1efe6b3eb5rbowen <tr>
ee9cda8f648f99a0b889cb0831ba5b1efe6b3eb5rbowen <td>last|L</td>
ee9cda8f648f99a0b889cb0831ba5b1efe6b3eb5rbowen <td>Stop the rewriting process immediately and don't apply any
ee9cda8f648f99a0b889cb0831ba5b1efe6b3eb5rbowen more rules. Especially note caveats for per-directory and
672ca0442b25e6241cd879a6fab71a90d46ba1bdrbowen .htaccess context (see also the END flag). <em><a href="/rewrite/flags.html#flag_l">details ...</a></em></td>
ee9cda8f648f99a0b889cb0831ba5b1efe6b3eb5rbowen </tr>
ee9cda8f648f99a0b889cb0831ba5b1efe6b3eb5rbowen <tr>
ee9cda8f648f99a0b889cb0831ba5b1efe6b3eb5rbowen <td>next|N</td>
ee9cda8f648f99a0b889cb0831ba5b1efe6b3eb5rbowen <td>Re-run the rewriting process, starting again with the first
ee9cda8f648f99a0b889cb0831ba5b1efe6b3eb5rbowen rule, using the result of the ruleset so far as a starting
ee9cda8f648f99a0b889cb0831ba5b1efe6b3eb5rbowen point. <em><a href="/rewrite/flags.html#flag_n">details
ee9cda8f648f99a0b889cb0831ba5b1efe6b3eb5rbowen ...</a></em></td>
ee9cda8f648f99a0b889cb0831ba5b1efe6b3eb5rbowen </tr>
ee9cda8f648f99a0b889cb0831ba5b1efe6b3eb5rbowen <tr>
ee9cda8f648f99a0b889cb0831ba5b1efe6b3eb5rbowen <td>nocase|NC</td>
9acc64833096d98e78737366e67c31de7a128801rbowen <td>Makes the pattern comparison case-insensitive.
ee9cda8f648f99a0b889cb0831ba5b1efe6b3eb5rbowen <em><a href="/rewrite/flags.html#flag_nc">details ...</a></em></td>
ee9cda8f648f99a0b889cb0831ba5b1efe6b3eb5rbowen </tr>
ee9cda8f648f99a0b889cb0831ba5b1efe6b3eb5rbowen <tr>
ee9cda8f648f99a0b889cb0831ba5b1efe6b3eb5rbowen <td>noescape|NE</td>
ee9cda8f648f99a0b889cb0831ba5b1efe6b3eb5rbowen <td>Prevent mod_rewrite from applying hexcode escaping of
ee9cda8f648f99a0b889cb0831ba5b1efe6b3eb5rbowen special characters in the result of the rewrite. <em><a href="/rewrite/flags.html#flag_ne">details ...</a></em></td>
ee9cda8f648f99a0b889cb0831ba5b1efe6b3eb5rbowen </tr>
ee9cda8f648f99a0b889cb0831ba5b1efe6b3eb5rbowen <tr>
ee9cda8f648f99a0b889cb0831ba5b1efe6b3eb5rbowen <td>nosubreq|NS</td>
ee9cda8f648f99a0b889cb0831ba5b1efe6b3eb5rbowen <td>Causes a rule to be skipped if the current request is an
ee9cda8f648f99a0b889cb0831ba5b1efe6b3eb5rbowen internal sub-request. <em><a href="/rewrite/flags.html#flag_ns">details ...</a></em></td>
ee9cda8f648f99a0b889cb0831ba5b1efe6b3eb5rbowen </tr>
ee9cda8f648f99a0b889cb0831ba5b1efe6b3eb5rbowen <tr>
ee9cda8f648f99a0b889cb0831ba5b1efe6b3eb5rbowen <td>proxy|P</td>
ee9cda8f648f99a0b889cb0831ba5b1efe6b3eb5rbowen <td>Force the substitution URL to be internally sent as a proxy
ee9cda8f648f99a0b889cb0831ba5b1efe6b3eb5rbowen request. <em><a href="/rewrite/flags.html#flag_p">details
ee9cda8f648f99a0b889cb0831ba5b1efe6b3eb5rbowen ...</a></em></td>
ee9cda8f648f99a0b889cb0831ba5b1efe6b3eb5rbowen </tr>
ee9cda8f648f99a0b889cb0831ba5b1efe6b3eb5rbowen <tr>
ee9cda8f648f99a0b889cb0831ba5b1efe6b3eb5rbowen <td>passthrough|PT</td>
ee9cda8f648f99a0b889cb0831ba5b1efe6b3eb5rbowen <td>Forces the resulting URI to be passed back to the URL
ee9cda8f648f99a0b889cb0831ba5b1efe6b3eb5rbowen mapping engine for processing of other URI-to-filename
ee9cda8f648f99a0b889cb0831ba5b1efe6b3eb5rbowen translators, such as <code>Alias</code> or
ee9cda8f648f99a0b889cb0831ba5b1efe6b3eb5rbowen <code>Redirect</code>. <em><a href="/rewrite/flags.html#flag_pt">details ...</a></em></td>
ee9cda8f648f99a0b889cb0831ba5b1efe6b3eb5rbowen </tr>
ee9cda8f648f99a0b889cb0831ba5b1efe6b3eb5rbowen <tr>
ee9cda8f648f99a0b889cb0831ba5b1efe6b3eb5rbowen <td>qsappend|QSA</td>
4988bb943ad0c9b851eae6a2e5d9a59529630b96rbowen <td>Appends any query string from the original request URL to
4988bb943ad0c9b851eae6a2e5d9a59529630b96rbowen any query string created in the rewrite target.<em><a href="/rewrite/flags.html#flag_qsa">details ...</a></em></td>
ee9cda8f648f99a0b889cb0831ba5b1efe6b3eb5rbowen </tr>
ee9cda8f648f99a0b889cb0831ba5b1efe6b3eb5rbowen <tr>
ee9cda8f648f99a0b889cb0831ba5b1efe6b3eb5rbowen <td>qsdiscard|QSD</td>
ee9cda8f648f99a0b889cb0831ba5b1efe6b3eb5rbowen <td>Discard any query string attached to the incoming URI.
ee9cda8f648f99a0b889cb0831ba5b1efe6b3eb5rbowen <em><a href="/rewrite/flags.html#flag_qsd">details
ee9cda8f648f99a0b889cb0831ba5b1efe6b3eb5rbowen ...</a></em></td>
ee9cda8f648f99a0b889cb0831ba5b1efe6b3eb5rbowen </tr>
ee9cda8f648f99a0b889cb0831ba5b1efe6b3eb5rbowen <tr>
ee9cda8f648f99a0b889cb0831ba5b1efe6b3eb5rbowen <td>redirect|R[=<em>code</em>]</td>
ee9cda8f648f99a0b889cb0831ba5b1efe6b3eb5rbowen <td>Forces an external redirect, optionally with the specified
ee9cda8f648f99a0b889cb0831ba5b1efe6b3eb5rbowen HTTP status code. <em><a href="/rewrite/flags.html#flag_r">details ...</a></em>
ee9cda8f648f99a0b889cb0831ba5b1efe6b3eb5rbowen </td>
ee9cda8f648f99a0b889cb0831ba5b1efe6b3eb5rbowen </tr>
ee9cda8f648f99a0b889cb0831ba5b1efe6b3eb5rbowen <tr>
ee9cda8f648f99a0b889cb0831ba5b1efe6b3eb5rbowen <td>skip|S=<em>num</em></td>
ee9cda8f648f99a0b889cb0831ba5b1efe6b3eb5rbowen <td>Tells the rewriting engine to skip the next <em>num</em>
ee9cda8f648f99a0b889cb0831ba5b1efe6b3eb5rbowen rules if the current rule matches. <em><a href="/rewrite/flags.html#flag_s">details ...</a></em></td>
ee9cda8f648f99a0b889cb0831ba5b1efe6b3eb5rbowen </tr>
ee9cda8f648f99a0b889cb0831ba5b1efe6b3eb5rbowen <tr>
3ad007d5c5f33f127acfb6cacffa7a63d6df1068rbowen <td>type|T=<em>MIME-type</em></td>
ee9cda8f648f99a0b889cb0831ba5b1efe6b3eb5rbowen <td>Force the <a class="glossarylink" href="/glossary.html#mime-type" title="see glossary">MIME-type</a> of the target file
ee9cda8f648f99a0b889cb0831ba5b1efe6b3eb5rbowen to be the specified type. <em><a href="/rewrite/flags.html#flag_t">details ...</a></em></td>
ee9cda8f648f99a0b889cb0831ba5b1efe6b3eb5rbowen </tr>
ee9cda8f648f99a0b889cb0831ba5b1efe6b3eb5rbowen </table>
ff21ab9f1cc3037fe58a2029432834581594b6c4pctony
de68ca33425122cf4a880859013e08e84f8143a5covener<div class="note"><h3>Home directory expansion</h3>
de68ca33425122cf4a880859013e08e84f8143a5covener<p> When the substitution string begins with a string
de68ca33425122cf4a880859013e08e84f8143a5covenerresembling "/~user" (via explicit text or backreferences), mod_rewrite performs
81785f72c9d133aef57ad6b02f248345d90239aapoirierhome directory expansion independent of the presence or configuration
4e6d765a1b53690664877065e6b6c741c1b96937covenerof <code class="module"><a href="/mod/mod_userdir.html">mod_userdir</a></code>.</p>
de68ca33425122cf4a880859013e08e84f8143a5covener
de68ca33425122cf4a880859013e08e84f8143a5covener<p> This expansion does not occur when the <em>PT</em>
de68ca33425122cf4a880859013e08e84f8143a5covenerflag is used on the <code class="directive"><a href="#rewriterule">RewriteRule</a></code>
de68ca33425122cf4a880859013e08e84f8143a5covenerdirective.</p>
de68ca33425122cf4a880859013e08e84f8143a5covener</div>
de68ca33425122cf4a880859013e08e84f8143a5covener
06ba4a61654b3763ad65f52283832ebf058fdf1cslive
bf380c59be3f235bde21f1c00098e09e3cf7e7aerpluem <p>Here are all possible substitution combinations and their
06ba4a61654b3763ad65f52283832ebf058fdf1cslive meanings:</p>
06ba4a61654b3763ad65f52283832ebf058fdf1cslive
06ba4a61654b3763ad65f52283832ebf058fdf1cslive <p><strong>Inside per-server configuration
97a9a944b5887e91042b019776c41d5dd74557aferikabele (<code>httpd.conf</code>)<br />
06ba4a61654b3763ad65f52283832ebf058fdf1cslive for request ``<code>GET
97a9a944b5887e91042b019776c41d5dd74557aferikabele /somepath/pathinfo</code>'':</strong><br />
06ba4a61654b3763ad65f52283832ebf058fdf1cslive </p>
06ba4a61654b3763ad65f52283832ebf058fdf1cslive
34212fdb21f03f4e180a3226f83e39af0371d7dbrbowen<table class="bordered">
34212fdb21f03f4e180a3226f83e39af0371d7dbrbowen<tr>
34212fdb21f03f4e180a3226f83e39af0371d7dbrbowen<th>Given Rule</th>
34212fdb21f03f4e180a3226f83e39af0371d7dbrbowen<th>Resulting Substitution</th>
34212fdb21f03f4e180a3226f83e39af0371d7dbrbowen</tr>
34212fdb21f03f4e180a3226f83e39af0371d7dbrbowen
34212fdb21f03f4e180a3226f83e39af0371d7dbrbowen<tr>
34212fdb21f03f4e180a3226f83e39af0371d7dbrbowen<td>^/somepath(.*) otherpath$1</td>
34212fdb21f03f4e180a3226f83e39af0371d7dbrbowen<td>invalid, not supported</td>
34212fdb21f03f4e180a3226f83e39af0371d7dbrbowen</tr>
34212fdb21f03f4e180a3226f83e39af0371d7dbrbowen
34212fdb21f03f4e180a3226f83e39af0371d7dbrbowen<tr>
34212fdb21f03f4e180a3226f83e39af0371d7dbrbowen<td>^/somepath(.*) otherpath$1 [R]</td>
34212fdb21f03f4e180a3226f83e39af0371d7dbrbowen<td>invalid, not supported</td>
34212fdb21f03f4e180a3226f83e39af0371d7dbrbowen</tr>
34212fdb21f03f4e180a3226f83e39af0371d7dbrbowen
34212fdb21f03f4e180a3226f83e39af0371d7dbrbowen<tr>
34212fdb21f03f4e180a3226f83e39af0371d7dbrbowen<td>^/somepath(.*) otherpath$1 [P]</td>
34212fdb21f03f4e180a3226f83e39af0371d7dbrbowen<td>invalid, not supported</td>
34212fdb21f03f4e180a3226f83e39af0371d7dbrbowen</tr>
34212fdb21f03f4e180a3226f83e39af0371d7dbrbowen
34212fdb21f03f4e180a3226f83e39af0371d7dbrbowen<tr>
34212fdb21f03f4e180a3226f83e39af0371d7dbrbowen<td>^/somepath(.*) /otherpath$1</td>
34212fdb21f03f4e180a3226f83e39af0371d7dbrbowen<td>/otherpath/pathinfo</td>
34212fdb21f03f4e180a3226f83e39af0371d7dbrbowen</tr>
34212fdb21f03f4e180a3226f83e39af0371d7dbrbowen
34212fdb21f03f4e180a3226f83e39af0371d7dbrbowen<tr>
34212fdb21f03f4e180a3226f83e39af0371d7dbrbowen<td>^/somepath(.*) /otherpath$1 [R]</td>
34212fdb21f03f4e180a3226f83e39af0371d7dbrbowen<td>http://thishost/otherpath/pathinfo via external redirection</td>
34212fdb21f03f4e180a3226f83e39af0371d7dbrbowen</tr>
34212fdb21f03f4e180a3226f83e39af0371d7dbrbowen
34212fdb21f03f4e180a3226f83e39af0371d7dbrbowen<tr>
34212fdb21f03f4e180a3226f83e39af0371d7dbrbowen<td>^/somepath(.*) /otherpath$1 [P]</td>
34212fdb21f03f4e180a3226f83e39af0371d7dbrbowen<td>doesn't make sense, not supported</td>
34212fdb21f03f4e180a3226f83e39af0371d7dbrbowen</tr>
34212fdb21f03f4e180a3226f83e39af0371d7dbrbowen
34212fdb21f03f4e180a3226f83e39af0371d7dbrbowen<tr>
34212fdb21f03f4e180a3226f83e39af0371d7dbrbowen<td>^/somepath(.*) http://thishost/otherpath$1</td>
34212fdb21f03f4e180a3226f83e39af0371d7dbrbowen<td>/otherpath/pathinfo</td>
34212fdb21f03f4e180a3226f83e39af0371d7dbrbowen</tr>
34212fdb21f03f4e180a3226f83e39af0371d7dbrbowen
34212fdb21f03f4e180a3226f83e39af0371d7dbrbowen<tr>
34212fdb21f03f4e180a3226f83e39af0371d7dbrbowen<td>^/somepath(.*) http://thishost/otherpath$1 [R]</td>
34212fdb21f03f4e180a3226f83e39af0371d7dbrbowen<td>http://thishost/otherpath/pathinfo via external redirection</td>
34212fdb21f03f4e180a3226f83e39af0371d7dbrbowen</tr>
34212fdb21f03f4e180a3226f83e39af0371d7dbrbowen
34212fdb21f03f4e180a3226f83e39af0371d7dbrbowen<tr>
34212fdb21f03f4e180a3226f83e39af0371d7dbrbowen<td>^/somepath(.*) http://thishost/otherpath$1 [P]</td>
34212fdb21f03f4e180a3226f83e39af0371d7dbrbowen<td>doesn't make sense, not supported</td>
34212fdb21f03f4e180a3226f83e39af0371d7dbrbowen</tr>
34212fdb21f03f4e180a3226f83e39af0371d7dbrbowen
34212fdb21f03f4e180a3226f83e39af0371d7dbrbowen<tr>
34212fdb21f03f4e180a3226f83e39af0371d7dbrbowen<td>^/somepath(.*) http://otherhost/otherpath$1</td>
34212fdb21f03f4e180a3226f83e39af0371d7dbrbowen<td>http://otherhost/otherpath/pathinfo via external redirection</td>
34212fdb21f03f4e180a3226f83e39af0371d7dbrbowen</tr>
34212fdb21f03f4e180a3226f83e39af0371d7dbrbowen
34212fdb21f03f4e180a3226f83e39af0371d7dbrbowen<tr>
34212fdb21f03f4e180a3226f83e39af0371d7dbrbowen<td>^/somepath(.*) http://otherhost/otherpath$1 [R]</td>
34212fdb21f03f4e180a3226f83e39af0371d7dbrbowen<td>http://otherhost/otherpath/pathinfo via external redirection (the [R] flag is redundant)</td>
34212fdb21f03f4e180a3226f83e39af0371d7dbrbowen</tr>
34212fdb21f03f4e180a3226f83e39af0371d7dbrbowen
34212fdb21f03f4e180a3226f83e39af0371d7dbrbowen<tr>
34212fdb21f03f4e180a3226f83e39af0371d7dbrbowen<td>^/somepath(.*) http://otherhost/otherpath$1 [P]</td>
34212fdb21f03f4e180a3226f83e39af0371d7dbrbowen<td>http://otherhost/otherpath/pathinfo via internal proxy</td>
34212fdb21f03f4e180a3226f83e39af0371d7dbrbowen</tr>
34212fdb21f03f4e180a3226f83e39af0371d7dbrbowen</table>
06ba4a61654b3763ad65f52283832ebf058fdf1cslive
06ba4a61654b3763ad65f52283832ebf058fdf1cslive <p><strong>Inside per-directory configuration for
97a9a944b5887e91042b019776c41d5dd74557aferikabele <code>/somepath</code><br />
c7d7b17e921d92419473ebe85ed7e4512001f68fhumbedooh (<code>/physical/path/to/somepath/.htaccess</code>, with
97a9a944b5887e91042b019776c41d5dd74557aferikabele <code>RewriteBase /somepath</code>)<br />
06ba4a61654b3763ad65f52283832ebf058fdf1cslive for request ``<code>GET
81785f72c9d133aef57ad6b02f248345d90239aapoirier /somepath/localpath/pathinfo</code>'':</strong><br />
06ba4a61654b3763ad65f52283832ebf058fdf1cslive </p>
06ba4a61654b3763ad65f52283832ebf058fdf1cslive
34212fdb21f03f4e180a3226f83e39af0371d7dbrbowen<table class="bordered">
34212fdb21f03f4e180a3226f83e39af0371d7dbrbowen
34212fdb21f03f4e180a3226f83e39af0371d7dbrbowen<tr>
34212fdb21f03f4e180a3226f83e39af0371d7dbrbowen<th>Given Rule</th>
34212fdb21f03f4e180a3226f83e39af0371d7dbrbowen<th>Resulting Substitution</th>
34212fdb21f03f4e180a3226f83e39af0371d7dbrbowen</tr>
34212fdb21f03f4e180a3226f83e39af0371d7dbrbowen
34212fdb21f03f4e180a3226f83e39af0371d7dbrbowen<tr>
34212fdb21f03f4e180a3226f83e39af0371d7dbrbowen<td>^localpath(.*) otherpath$1</td>
34212fdb21f03f4e180a3226f83e39af0371d7dbrbowen<td>/somepath/otherpath/pathinfo</td>
34212fdb21f03f4e180a3226f83e39af0371d7dbrbowen</tr>
34212fdb21f03f4e180a3226f83e39af0371d7dbrbowen
34212fdb21f03f4e180a3226f83e39af0371d7dbrbowen<tr>
34212fdb21f03f4e180a3226f83e39af0371d7dbrbowen<td>^localpath(.*) otherpath$1 [R]</td>
34212fdb21f03f4e180a3226f83e39af0371d7dbrbowen<td>http://thishost/somepath/otherpath/pathinfo via external
34212fdb21f03f4e180a3226f83e39af0371d7dbrbowenredirection</td>
34212fdb21f03f4e180a3226f83e39af0371d7dbrbowen</tr>
34212fdb21f03f4e180a3226f83e39af0371d7dbrbowen
34212fdb21f03f4e180a3226f83e39af0371d7dbrbowen<tr>
34212fdb21f03f4e180a3226f83e39af0371d7dbrbowen<td>^localpath(.*) otherpath$1 [P]</td>
34212fdb21f03f4e180a3226f83e39af0371d7dbrbowen<td>doesn't make sense, not supported</td>
34212fdb21f03f4e180a3226f83e39af0371d7dbrbowen</tr>
34212fdb21f03f4e180a3226f83e39af0371d7dbrbowen
34212fdb21f03f4e180a3226f83e39af0371d7dbrbowen<tr>
34212fdb21f03f4e180a3226f83e39af0371d7dbrbowen<td>^localpath(.*) /otherpath$1</td>
34212fdb21f03f4e180a3226f83e39af0371d7dbrbowen<td>/otherpath/pathinfo</td>
34212fdb21f03f4e180a3226f83e39af0371d7dbrbowen</tr>
34212fdb21f03f4e180a3226f83e39af0371d7dbrbowen
34212fdb21f03f4e180a3226f83e39af0371d7dbrbowen<tr>
34212fdb21f03f4e180a3226f83e39af0371d7dbrbowen<td>^localpath(.*) /otherpath$1 [R]</td>
34212fdb21f03f4e180a3226f83e39af0371d7dbrbowen<td>http://thishost/otherpath/pathinfo via external redirection</td>
34212fdb21f03f4e180a3226f83e39af0371d7dbrbowen</tr>
34212fdb21f03f4e180a3226f83e39af0371d7dbrbowen
34212fdb21f03f4e180a3226f83e39af0371d7dbrbowen<tr>
34212fdb21f03f4e180a3226f83e39af0371d7dbrbowen<td>^localpath(.*) /otherpath$1 [P]</td>
34212fdb21f03f4e180a3226f83e39af0371d7dbrbowen<td>doesn't make sense, not supported</td>
34212fdb21f03f4e180a3226f83e39af0371d7dbrbowen</tr>
34212fdb21f03f4e180a3226f83e39af0371d7dbrbowen
34212fdb21f03f4e180a3226f83e39af0371d7dbrbowen<tr>
34212fdb21f03f4e180a3226f83e39af0371d7dbrbowen<td>^localpath(.*) http://thishost/otherpath$1</td>
34212fdb21f03f4e180a3226f83e39af0371d7dbrbowen<td>/otherpath/pathinfo</td>
34212fdb21f03f4e180a3226f83e39af0371d7dbrbowen</tr>
34212fdb21f03f4e180a3226f83e39af0371d7dbrbowen
34212fdb21f03f4e180a3226f83e39af0371d7dbrbowen<tr>
34212fdb21f03f4e180a3226f83e39af0371d7dbrbowen<td>^localpath(.*) http://thishost/otherpath$1 [R]</td>
34212fdb21f03f4e180a3226f83e39af0371d7dbrbowen<td>http://thishost/otherpath/pathinfo via external redirection</td>
34212fdb21f03f4e180a3226f83e39af0371d7dbrbowen</tr>
34212fdb21f03f4e180a3226f83e39af0371d7dbrbowen
34212fdb21f03f4e180a3226f83e39af0371d7dbrbowen<tr>
34212fdb21f03f4e180a3226f83e39af0371d7dbrbowen<td>^localpath(.*) http://thishost/otherpath$1 [P]</td>
34212fdb21f03f4e180a3226f83e39af0371d7dbrbowen<td>doesn't make sense, not supported</td>
34212fdb21f03f4e180a3226f83e39af0371d7dbrbowen</tr>
34212fdb21f03f4e180a3226f83e39af0371d7dbrbowen
34212fdb21f03f4e180a3226f83e39af0371d7dbrbowen<tr>
34212fdb21f03f4e180a3226f83e39af0371d7dbrbowen<td>^localpath(.*) http://otherhost/otherpath$1</td>
34212fdb21f03f4e180a3226f83e39af0371d7dbrbowen<td>http://otherhost/otherpath/pathinfo via external redirection</td>
34212fdb21f03f4e180a3226f83e39af0371d7dbrbowen</tr>
34212fdb21f03f4e180a3226f83e39af0371d7dbrbowen
34212fdb21f03f4e180a3226f83e39af0371d7dbrbowen<tr>
34212fdb21f03f4e180a3226f83e39af0371d7dbrbowen<td>^localpath(.*) http://otherhost/otherpath$1 [R]</td>
34212fdb21f03f4e180a3226f83e39af0371d7dbrbowen<td>http://otherhost/otherpath/pathinfo via external redirection (the [R] flag is redundant)</td>
34212fdb21f03f4e180a3226f83e39af0371d7dbrbowen</tr>
34212fdb21f03f4e180a3226f83e39af0371d7dbrbowen
34212fdb21f03f4e180a3226f83e39af0371d7dbrbowen<tr>
34212fdb21f03f4e180a3226f83e39af0371d7dbrbowen<td>^localpath(.*) http://otherhost/otherpath$1 [P]</td>
34212fdb21f03f4e180a3226f83e39af0371d7dbrbowen<td>http://otherhost/otherpath/pathinfo via internal proxy</td>
34212fdb21f03f4e180a3226f83e39af0371d7dbrbowen</tr>
06ba4a61654b3763ad65f52283832ebf058fdf1cslive
34212fdb21f03f4e180a3226f83e39af0371d7dbrbowen</table>
06ba4a61654b3763ad65f52283832ebf058fdf1cslive
0c4abc32c00611fe1d52c9661f5cc79a3f74c6d4nd
0c4abc32c00611fe1d52c9661f5cc79a3f74c6d4nd</div>
0c4abc32c00611fe1d52c9661f5cc79a3f74c6d4nd</div>
3b3b7fc78d1f5bfc2769903375050048ff41ff26nd<div class="bottomlang">
7dc5a2d4a0c77f5bf5a95de92d68e43de7d8117anilgun<p><span>Available Languages: </span><a href="/en/mod/mod_rewrite.html" title="English">&nbsp;en&nbsp;</a> |
f086b4b402fa9a2fefc7dda85de2a3cc1cd0a654rjung<a href="/fr/mod/mod_rewrite.html" hreflang="fr" rel="alternate" title="Fran�ais">&nbsp;fr&nbsp;</a></p>
727872d18412fc021f03969b8641810d8896820bhumbedooh</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 again 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 Freenode, or sent to our <a href="http://httpd.apache.org/lists.html">mailing lists</a>.</div>
0d0ba3a410038e179b695446bb149cce6264e0abnd<script type="text/javascript"><!--//--><![CDATA[//><!--
727872d18412fc021f03969b8641810d8896820bhumbedoohvar comments_shortname = 'httpd';
cc7e1025de9ac63bd4db6fe7f71c158b2cf09fe4humbedoohvar comments_identifier = 'http://httpd.apache.org/docs/trunk/mod/mod_rewrite.html';
0d0ba3a410038e179b695446bb149cce6264e0abnd(function(w, d) {
cc7e1025de9ac63bd4db6fe7f71c158b2cf09fe4humbedooh if (w.location.hostname.toLowerCase() == "httpd.apache.org") {
727872d18412fc021f03969b8641810d8896820bhumbedooh d.write('<div id="comments_thread"><\/div>');
0d0ba3a410038e179b695446bb149cce6264e0abnd var s = d.createElement('script');
0d0ba3a410038e179b695446bb149cce6264e0abnd s.type = 'text/javascript';
0d0ba3a410038e179b695446bb149cce6264e0abnd s.async = true;
ac082aefa89416cbdc9a1836eaf3bed9698201c8humbedooh s.src = 'https://comments.apache.org/show_comments.lua?site=' + comments_shortname + '&page=' + comments_identifier;
0d0ba3a410038e179b695446bb149cce6264e0abnd (d.getElementsByTagName('head')[0] || d.getElementsByTagName('body')[0]).appendChild(s);
0d0ba3a410038e179b695446bb149cce6264e0abnd }
0d0ba3a410038e179b695446bb149cce6264e0abnd else {
727872d18412fc021f03969b8641810d8896820bhumbedooh d.write('<div id="comments_thread">Comments are disabled for this page at the moment.<\/div>');
0d0ba3a410038e179b695446bb149cce6264e0abnd }
0d0ba3a410038e179b695446bb149cce6264e0abnd})(window, document);
30471a4650391f57975f60bbb6e4a90be7b284bfhumbedooh//--><!]]></script></div><div id="footer">
07dc96d063d49299da433f84b5c5681da9bbdf68rbowen<p class="apache">Copyright 2014 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>
af33a4994ae2ff15bc67d19ff1a7feb906745bf8rbowen<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[//><!--
0d0ba3a410038e179b695446bb149cce6264e0abndif (typeof(prettyPrint) !== 'undefined') {
7fec19672a491661b2fe4b29f685bc7f4efa64d4nd prettyPrint();
7fec19672a491661b2fe4b29f685bc7f4efa64d4nd}
7fec19672a491661b2fe4b29f685bc7f4efa64d4nd//--><!]]></script>
0c0b2cdbccd4ddc8f07574c36444bf9a795a3e1cjim</body></html>