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

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

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

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

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

  <title>RewriteRule Flags</title>

<summary>
<p>This document discusses the flags which are available to the
<directive module="mod_rewrite">RewriteRule</directive> directive,
providing detailed explanations and examples.</p>
</summary>

<seealso><a href="../mod/mod_rewrite.html">Module documentation</a></seealso>
<seealso><a href="intro.html">mod_rewrite introduction</a></seealso>
<seealso><a href="remapping.html">Redirection and remapping</a></seealso>
<seealso><a href="access.html">Controlling access</a></seealso>
<seealso><a href="vhosts.html">Virtual hosts</a></seealso>
<seealso><a href="proxy.html">Proxying</a></seealso>
<seealso><a href="rewritemap.html">Using RewriteMap</a></seealso>
<seealso><a href="advanced.html">Advanced techniques</a></seealso>
<seealso><a href="avoid.html">When not to use mod_rewrite</a></seealso>

<section id="introduction"><title>Introduction</title>
<p>A <directive module="mod_rewrite">RewriteRule</directive> can have
its behavior modified by one or more flags. Flags are included in
square brackets at the end of the rule, and multiple flags are separated
by commas.</p>
<example>
RewriteRule pattern target [Flag1,Flag2,Flag3]
</example>

<p>Each flag (with a few exceptions) has a short form, such as
<code>CO</code>, as well as a longer form, such as <code>cookie</code>. 
While it is most common to use
the short form, it is recommended that you familiarize yourself with the
long form, so that you remember what each flag is supposed to do.
Some flags take one or more arguments. Flags are not case sensitive.</p>

<p>Flags that alter metadata associated with the request (T=, H=, E=)
have no affect in per-directory and htaccess context, when a substitution
(other than '-') is performed during the same round of rewrite processing.
</p>

<p>Presented here are each of the available flags, along with an example
of how you might use them.</p>
</section>

<section id="flag_b"><title>B (escape backreferences)</title>
<p>The [B] flag instructs <directive
module="mod_rewrite">RewriteRule</directive> to escape non-alphanumeric
characters before applying the transformation.
</p>

<p><code>mod_rewrite</code> has to unescape URLs before mapping them,
so backreferences will be unescaped at the time they are applied.
Using the B flag, non-alphanumeric characters in backreferences
will be escaped. For example, consider the rule:</p>

<highlight language="config">RewriteRule ^search/(.*)$ /search.php?term=$1</highlight>

<p>Given a search term of 'x &amp; y/z', a browser will encode it as
'x%20%26%20y%2Fz', making the request 'search/x%20%26%20y%2Fz'. Without the B
flag, this rewrite rule will map to 'search.php?term=x &amp; y/z', which
isn't a valid URL, and so would be encoded as
<code>search.php?term=x%20&amp;y%2Fz=</code>, which is not what was intended.</p>

<p>With the B flag set on this same rule, the parameters are re-encoded
before being passed on to the output URL, resulting in a correct mapping to
<code>/search.php?term=x%20%26%20y%2Fz</code>.</p>

<p>Note that you may also need to set <directive
module="core">AllowEncodedSlashes</directive> to <code>On</code> to get this
particular example to work, as httpd does not allow encoded slashes in URLs, and
returns a 404 if it sees one.</p>

<p>This escaping is particularly necessary in a proxy situation,
when the backend may break if presented with an unescaped URL.</p>

</section>

<section id="flag_c"><title>C|chain</title>
<p>The [C] or [chain] flag indicates that the <directive
module="mod_rewrite">RewriteRule</directive> is chained to the next
rule. That is, if the rule matches, then it is processed as usual and
control moves on to the next rule. However, if it does not match, then
the next rule, and any other rules that are chained together, will be
skipped.</p>

</section>

<section id="flag_co"><title>CO|cookie</title>
<p>The [CO], or [cookie] flag, allows you to set a cookie when a
particular <directive module="mod_rewrite">RewriteRule</directive>
matches. The argument consists of three required fields and four optional
fields.</p>

<p>The full syntax for the flag, including all attributes, is as
follows:</p>

<example>
[CO=NAME:VALUE:DOMAIN:lifetime:path:secure:httponly]
</example>

<p>You must declare a name, a value, and a domain for the cookie to be set.</p>

<dl>
<dt>Domain</dt>
<dd>The domain for which you want the cookie to be valid. This may be a
hostname, such as <code>www.example.com</code>, or it may be a domain,
such as <code>.example.com</code>. It must be at least two parts
separated by a dot. That is, it may not be merely <code>.com</code> or
<code>.net</code>. Cookies of that kind are forbidden by the cookie
security model.</dd>
</dl>

<p>You may optionally also set the following values:</p>

<dl>
<dt>Lifetime</dt>
<dd>The time for which the cookie will persist, in minutes.</dd>
<dd>A value of 0 indicates that the cookie will persist only for the
current browser session. This is the default value if none is
specified.  Prior to 2.2.28, a value of 0 indicates immediate expiration
and it was not possible to specify session lifetime if any later 
parameters (Path, Secure, httponly) were specified</dd>

<dt>Path</dt>
<dd>The path, on the current website, for which the cookie is valid,
such as <code>/customers/</code> or <code>/files/download/</code>.</dd>
<dd>By default, this is set to <code>/</code> - that is, the entire
website.</dd>

<dt>Secure</dt>
<dd>If set to <code>secure</code>, <code>true</code>, or <code>1</code>,
the cookie will only be permitted to be translated via secure (https)
connections.</dd>

<dt>httponly</dt>
<dd>If set to <code>HttpOnly</code>, <code>true</code>, or
<code>1</code>, the cookie will have the <code>HttpOnly</code> flag set,
which means that the cookie will be inaccessible to JavaScript code on
browsers that support this feature.</dd>
</dl>

<p>Several examples are offered here:</p>

<example>
RewriteEngine On<br />
RewriteRule ^/index\.html - [CO=frontdoor:yes:.example.com:1440:/]
</example>

<p>In the example give, the rule doesn't rewrite the request.
The "-" rewrite target tells mod_rewrite to pass the request
through unchanged. Instead, it sets a cookie
called 'frontdoor' to a value of 'yes'. The cookie is valid for any host
in the <code>.example.com</code> domain. It will be set to expire in 1440
minutes (24 hours) and will be returned for all URIs.</p>

</section>

<section id="flag_dpi"><title>DPI|discardpathinfo</title>
<p>The DPI flag causes the PATH_INFO portion of the rewritten URI to be
discarded.</p>
<p>This flag is available in version 2.2.12 and later.</p>
<p>In per-directory context, the URI each <directive>RewriteRule</directive>
compares against is the concatenation of the current values of the URI
and PATH_INFO.</p>

<p>The current URI can be the initial URI as requested by the client, the
result of a previous round of mod_rewrite processing, or the result of
a prior rule in the current round of mod_rewrite processing.</p>

<p>In contrast, the PATH_INFO that is appended to the URI before each
rule reflects only the value of PATH_INFO before this round of
mod_rewrite processing. As a consequence, if large portions
of the URI are matched and copied into a substitution in multiple
<directive>RewriteRule</directive> directives, without regard for
which parts of the URI came from the current PATH_INFO, the final
URI may have multiple copies of PATH_INFO appended to it.</p>

<p>Use this flag on any substitution where the PATH_INFO that resulted
from the previous mapping of this request to the filesystem is not of
interest.  This flag permanently forgets the PATH_INFO established
before this round of mod_rewrite processing began. PATH_INFO will
not be recalculated until the current round of mod_rewrite processing
completes.  Subsequent rules during this round of processing will see
only the direct result of substitutions, without any PATH_INFO
appended.</p>
</section>

<section id="flag_e"><title>E|env</title>
<p>With the [E], or [env] flag, you can set the value of an environment
variable. Note that some environment variables may be set after the rule
is run, thus unsetting what you have set. See <a href="../env.html">the
Environment Variables document</a> for more details on how Environment
variables work.</p>

<p>The full syntax for this flag is:</p>

<example>
[E=VAR:VAL]
[E=!VAR]
</example>

<p><code>VAL</code> may contain backreferences (<code>$N</code> or
<code>%N</code>) which will be expanded.</p>

<p>Using the short form</p>

<example>
[E=VAR]
</example>

<p>you can set the environment variable named <code>VAR</code> to an
empty value.</p>

<p>The form</p>

<example>
[E=!VAR]
</example>

<p>allows to unset a previously set environment variable named
<code>VAR</code>.</p>

<p>Environment variables can then be used in a variety of
contexts, including CGI programs, other RewriteRule directives, or
CustomLog directives.</p>

<p>The following example sets an environment variable called 'image' to a
value of '1' if the requested URI is an image file. Then, that
environment variable is used to exclude those requests from the access
log.</p>

<example>
RewriteRule \.(png|gif|jpg) - [E=image:1]<br />
CustomLog logs/access_log combined env=!image
</example>

<p>Note that this same effect can be obtained using <directive
module="mod_setenvif">SetEnvIf</directive>. This technique is offered as
an example, not as a recommendation.</p>
</section>

<section id="flag_f"><title>F|forbidden</title>
<p>Using the [F] flag causes the server to return a 403 Forbidden status
code to the client. While the same behavior can be accomplished using
the <directive module="mod_authz_host">Deny</directive> directive, this 
allows more flexibility in assigning a Forbidden status.</p>

<p>The following rule will forbid <code>.exe</code> files from being
downloaded from your server.</p>

<example>
RewriteRule \.exe - [F]
</example>

<p>This example uses the "-" syntax for the rewrite target, which means
that the requested URI is not modified. There's no reason to rewrite to
another URI, if you're going to forbid the request.</p>

<p>When using [F], an [L] is implied - that is, the response is returned
immediately, and no further rules are evaluated.</p>

</section>

<section id="flag_g"><title>G|gone</title>
<p>The [G] flag forces the server to return a 410 Gone status with the
response. This indicates that a resource used to be available, but is no
longer available.</p>

<p>As with the [F] flag, you will typically use the "-" syntax for the
rewrite target when using the [G] flag:</p>

<example>
RewriteRule oldproduct - [G,NC]
</example>

<p>When using [G], an [L] is implied - that is, the response is returned
immediately, and no further rules are evaluated.</p>

</section>

<section id="flag_h"><title>H|handler</title>
<p>Forces the resulting request to be handled with the specified
handler. For example, one might use this to force all files without a
file extension to be parsed by the php handler:</p>

<example>
RewriteRule !\. - [H=application/x-httpd-php]
</example>

<p>
The regular expression above - <code>!\.</code> - will match any request
that does not contain the literal <code>.</code> character.
</p>

<p>This can be also used to force the handler based on some conditions.
For example, the following snippet used in per-server context allows
<code>.php</code> files to be <em>displayed</em> by <code>mod_php</code>
if they are requested with the <code>.phps</code> extension:</p>

<example>
RewriteRule ^(/source/.+\.php)s$ $1 [H=application/x-httpd-php-source]
</example>

<p>The regular expression above - <code>^(/source/.+\.php)s$</code> - will
match any request that starts with <code>/source/</code> followed by 1 or
n characters followed by <code>.phps</code> literally. The backreference
$1 referrers to the captured match within parenthesis of the regular
expression.</p>
</section>

<section id="flag_l"><title>L|last</title>
<p>The [L] flag causes <module>mod_rewrite</module> to stop processing
the rule set. In most contexts, this means that if the rule matches, no
further rules will be processed. This corresponds to the
<code>last</code> command in Perl, or the <code>break</code> command in
C. Use this flag to indicate that the current rule should be applied
immediately without considering further rules.</p>

<p>If you are using <directive
module="mod_rewrite">RewriteRule</directive> in either
<code>.htaccess</code> files or in
<directive type="section" module="core">Directory</directive> sections,
it is important to have some understanding of how the rules are
processed.  The simplified form of this is that once the rules have been
processed, the rewritten request is handed back to the URL parsing
engine to do what it may with it. It is possible that as the rewritten
request is handled, the <code>.htaccess</code> file or
<directive type="section" module="core">Directory</directive> section
may be encountered again, and thus the ruleset may be run again from the
start. Most commonly this will happen if one of the rules causes a
redirect - either internal or external - causing the request process to
start over.</p>

<p>It is therefore important, if you are using <directive
module="mod_rewrite">RewriteRule</directive> directives in one of these
contexts, that you take explicit steps to avoid rules looping, and not
count solely on the [L] flag to terminate execution of a series of
rules, as shown below.</p>

<p>The example given here will rewrite any request to
<code>index.php</code>, giving the original request as a query string
argument to <code>index.php</code>, however, the <directive
module="mod_rewrite">RewriteCond</directive> ensures that if the request
is already for <code>index.php</code>, the <directive
module="mod_rewrite">RewriteRule</directive> will be skipped.</p>

<example>
RewriteBase /<br />
RewriteCond %{REQUEST_URI} !=/index.php<br />
RewriteRule ^(.*) /index.php?req=$1 [L,PT]
</example>
</section>

<section id="flag_n"><title>N|next</title>
<p>
The [N] flag causes the ruleset to start over again from the top, using
the result of the ruleset so far as a starting point. Use
with extreme caution, as it may result in loop.
</p>
<p>
The [Next] flag could be used, for example, if you wished to replace a
certain string or letter repeatedly in a request. The example shown here
will replace A with B everywhere in a request, and will continue doing
so until there are no more As to be replaced.
</p>

<example>
RewriteRule (.*)A(.*) $1B$2 [N]
</example>

<p>You can think of this as a <code>while</code> loop: While this
pattern still matches (i.e., while the URI still contains an
<code>A</code>), perform this substitution (i.e., replace the
<code>A</code> with a <code>B</code>).</p>

</section>

<section id="flag_nc"><title>NC|nocase</title>
<p>Use of the [NC] flag causes the <directive
module="mod_rewrite">RewriteRule</directive> to be matched in a
case-insensitive manner. That is, it doesn't care whether letters appear
as upper-case or lower-case in the matched URI.</p>

<p>In the example below, any request for an image file will be proxied
to your dedicated image server. The match is case-insensitive, so that
<code>.jpg</code> and <code>.JPG</code> files are both acceptable, for
example.</p>

<example>
RewriteRule (.*\.(jpg|gif|png))$ http://images.example.com$1 [P,NC]
</example>
</section>

<section id="flag_ne"><title>NE|noescape</title>
<p>By default, special characters, such as <code>&amp;</code> and
<code>?</code>, for example, will be converted to their hexcode
equivalent. Using the [NE] flag prevents that from happening.
</p>

<example>
RewriteRule ^/anchor/(.+) /bigpage.html#$1 [NE,R]
</example>

<p>
The above example will redirect <code>/anchor/xyz</code> to
<code>/bigpage.html#xyz</code>. Omitting the [NE] will result in the #
being converted to its hexcode equivalent, <code>%23</code>, which will
then result in a 404 Not Found error condition.
</p>

</section>

<section id="flag_ns"><title>NS|nosubreq</title>
<p>Use of the [NS] flag prevents the rule from being used on
subrequests. For example, a page which is included using an SSI (Server
Side Include) is a subrequest, and you may want to avoid rewrites
happening on those subrequests. Also, when <module>mod_dir</module>
tries to find out information about possible directory default files
(such as <code>index.html</code> files), this is an internal
subrequest, and you often want to avoid rewrites on such subrequests.
On subrequests, it is not always useful, and can even cause errors, if
the complete set of rules are applied. Use this flag to exclude
problematic rules.</p>

<p>To decide whether or not to use this rule: if you prefix URLs with
CGI-scripts, to force them to be processed by the CGI-script, it's
likely that you will run into problems (or significant overhead)
on sub-requests. In these cases, use this flag.</p>

<p>
Images, javascript files, or css files, loaded as part of an HTML page,
are not subrequests - the browser requests them as separate HTTP
requests.
</p>
</section>

<section id="flag_p"><title>P|proxy</title>
<p>Use of the [P] flag causes the request to be handled by
<module>mod_proxy</module>, and handled via a proxy request. For
example, if you wanted all image requests to be handled by a back-end
image server, you might do something like the following:</p>

<example>
RewriteRule /(.*)\.(jpg|gif|png) http://images.example.com/$1.$2 [P]
</example>

<p>Use of the [P] flag implies [L] - that is, the request is immediately
pushed through the proxy, and any following rules will not be
considered.</p>

<p>
You must make sure that the substitution string is a valid URI
(typically starting with <code>http://</code><em>hostname</em>) which can be
handled by the <module>mod_proxy</module>. If not, you will get an
error from the proxy module. Use this flag to achieve a
more powerful implementation of the <directive
module="mod_proxy">ProxyPass</directive> directive,
to map remote content into the namespace of the local server.</p>

<note type="warning">
<title>Security Warning</title>
<p>Take care when constructing the target URL of the rule, considering
the security impact from allowing the client influence over the set of
URLs to which your server will act as a proxy.  Ensure that the scheme
and hostname part of the URL is either fixed, or does not allow the
client undue influence.</p>
</note>

<p>Note: <module>mod_proxy</module> must be enabled in order
to use this flag.</p>

</section>

<section id="flag_pt"><title>PT|passthrough</title>

<p>
The target (or substitution string) in a RewriteRule is assumed to be a
file path, by default. The use of the [PT] flag causes it to be treated
as a URI instead. That is to say, the
use of the [PT] flag causes the result of the <directive
module="mod_rewrite">RewriteRule</directive> to be passed back through
URL mapping, so that location-based mappings, such as <directive
module="mod_alias">Alias</directive>, <directive
module="mod_alias">Redirect</directive>, or <directive
module="mod_alias">ScriptAlias</directive>, for example, might have a
chance to take effect.
</p>

<p>
If, for example, you have an
<directive module="mod_alias">Alias</directive>
for /icons, and have a <directive
module="mod_rewrite">RewriteRule</directive> pointing there, you should
use the [PT] flag to ensure that the
<directive module="mod_alias">Alias</directive> is evaluated.
</p>

<example>
Alias /icons /usr/local/apache/icons<br />
RewriteRule /pics/(.+)\.jpg /icons/$1.gif [PT]
</example>

<p>
Omission of the [PT] flag in this case will cause the Alias to be
ignored, resulting in a 'File not found' error being returned.
</p>

<p>The <code>PT</code> flag implies the <code>L</code> flag:
rewriting will be stopped in order to pass the request to
the next phase of processing.</p>

<p>Note that the <code>PT</code> flag is implied in per-directory
contexts such as
<directive type="section" module="core">Directory</directive> sections
or in <code>.htaccess</code> files. The only way to circumvent that
is to rewrite to <code>-</code>.</p>

</section>

<section id="flag_qsa"><title>QSA|qsappend</title>
<p>
When the replacement URI contains a query string, the default behavior
of <directive module="mod_rewrite">RewriteRule</directive> is to discard
the existing query string, and replace it with the newly generated one.
Using the [QSA] flag causes the query strings to be combined.
</p>

<p>Consider the following rule:</p>

<example>
RewriteRule /pages/(.+) /page.php?page=$1 [QSA]
</example>

<p>With the [QSA] flag, a request for <code>/pages/123?one=two</code> will be
mapped to <code>/page.php?page=123&amp;one=two</code>. Without the [QSA]
flag, that same request will be mapped to
<code>/page.php?page=123</code> - that is, the existing query string
will be discarded.
</p>
</section>

<section id="flag_r"><title>R|redirect</title>
<p>
Use of the [R] flag causes a HTTP redirect to be issued to the browser.
If a fully-qualified URL is specified (that is, including
<code>http://servername/</code>) then a redirect will be issued to that
location. Otherwise, the current protocol, servername, and port number
will be used to generate the URL sent with the redirect.
</p>

<p>
<em>Any</em> valid HTTP response  status code may be specified,
using the syntax [R=305], with a 302 status code being used by
default if none is specified. The status code specified need not
necessarily be a redirect (3xx) status code. However, 
if a status code is outside the redirect range (300-399) then the
substitution string is dropped entirely, and rewriting is stopped as if
the <code>L</code> were used.</p>

<p>In addition to response status codes, you may also specify redirect
status using their symbolic names: <code>temp</code> (default),
<code>permanent</code>, or <code>seeother</code>.</p>

<p>
You will almost always want to use [R] in conjunction with [L] (that is,
use [R,L]) because on its own, the [R] flag prepends
<code>http://thishost[:thisport]</code> to the URI, but then passes this
on to the next rule in the ruleset, which can often result in 'Invalid
URI in request' warnings.
</p>

</section>

<section id="flag_s"><title>S|skip</title>
<p>The [S] flag is used to skip rules that you don't want to run. The 
syntax of the skip flag is [S=<em>N</em>], where <em>N</em> signifies 
the number of rules to skip (provided the <directive module="mod_rewrite">
RewriteRule</directive> matches). This can be thought of as a <code>goto</code> 
statement in your rewrite ruleset. In the following example, we only want 
to run the <directive module="mod_rewrite">RewriteRule</directive> if the 
requested URI doesn't correspond with an actual file.</p>

<example>
# Is the request for a non-existent file?<br/>
RewriteCond %{REQUEST_FILENAME} !-f<br/>
RewriteCond %{REQUEST_FILENAME} !-d<br/>
# If so, skip these two RewriteRules<br/>
RewriteRule .? - [S=2]<br/>
RewriteRule (.*\.gif) images.php?$1<br/>
RewriteRule (.*\.html) docs.php?$1<br/>
</example>

<p>This technique is useful because a <directive
module="mod_rewrite">RewriteCond</directive> only applies to the
<directive module="mod_rewrite">RewriteRule</directive> immediately
following it. Thus, if you want to make a <code>RewriteCond</code> apply
to several <code>RewriteRule</code>s, one possible technique is to
negate those conditions and add a <code>RewriteRule</code> with a [Skip] flag. You can
use this to make pseudo if-then-else constructs: The last rule of
the then-clause becomes <code>skip=N</code>, where N is the
number of rules in the else-clause:</p>
<example>
# Does the file exist?<br />
RewriteCond %{REQUEST_FILENAME} !-f<br />
RewriteCond %{REQUEST_FILENAME} !-d<br />
# Create an if-then-else construct by skipping 3 lines if we meant to go to the &quot;else&quot; stanza.<br />
RewriteRule .? - [S=3]<br />
<br />
# IF the file exists, then:
<indent>
        RewriteRule (.*\.gif) images.php?$1<br />
        RewriteRule (.*\.html) docs.php?$1<br />
        # Skip past the &quot;else&quot; stanza.<br />
        RewriteRule .? - [S=1]<br />
</indent>
# ELSE...
<indent>
        RewriteRule (.*) 404.php?file=$1<br />
</indent>
# END
</example>
</section>

<section id="flag_t"><title>T|type</title>
<p>Sets the MIME type with which the resulting response will be
sent. This has the same effect as the <directive
module="mod_mime">AddType</directive> directive.</p>

<p>For example, you might use the following technique to serve Perl
source code as plain text, if requested in a particular way:</p>

<example>
# Serve .pl files as plain text<br />
RewriteRule \.pl$ - [T=text/plain]
</example>

<p>Or, perhaps, if you have a camera that produces jpeg images without
file extensions, you could force those images to be served with the
correct MIME type by virtue of their file names:</p>

<example>
# Files with 'IMG' in the name are jpg images.<br />
RewriteRule IMG - [T=image/jpg]
</example>

<p>Please note that this is a trivial example, and could be better done
using <directive type="section" module="core">FilesMatch</directive>
instead. Always consider the alternate
solutions to a problem before resorting to rewrite, which will
invariably be a less efficient solution than the alternatives.</p>

<p>
If used in per-directory context, use only <code>-</code> (dash)
as the substitution <em>for the entire round of mod_rewrite processing</em>,
otherwise the MIME-type set with this flag is lost due to an internal
re-processing (including subsequent rounds of mod_rewrite processing).
The <code>L</code> flag can be useful in this context to end the
<em>current</em> round of mod_rewrite processing.</p>

</section>

</manualpage>

