mod_rewrite.xml revision 12b26f433fd7d6fc9f76413d7c2cabf4fa5cb300
60a4b2c422dcbb08a554fb193105c08da592718bpoirier<!DOCTYPE modulesynopsis SYSTEM "/style/modulesynopsis.dtd">
60a4b2c422dcbb08a554fb193105c08da592718bpoirier<?xml-stylesheet type="text/xsl" href="/style/manual.en.xsl"?>
60a4b2c422dcbb08a554fb193105c08da592718bpoirier<!-- $LastChangedRevision$ -->
60a4b2c422dcbb08a554fb193105c08da592718bpoirier Licensed to the Apache Software Foundation (ASF) under one or more
60a4b2c422dcbb08a554fb193105c08da592718bpoirier contributor license agreements. See the NOTICE file distributed with
60a4b2c422dcbb08a554fb193105c08da592718bpoirier this work for additional information regarding copyright ownership.
60a4b2c422dcbb08a554fb193105c08da592718bpoirier The ASF licenses this file to You under the Apache License, Version 2.0
d29d9ab4614ff992b0e8de6e2b88d52b6f1f153erbowen (the "License"); you may not use this file except in compliance with
d29d9ab4614ff992b0e8de6e2b88d52b6f1f153erbowen the License. You may obtain a copy of the License at
60a4b2c422dcbb08a554fb193105c08da592718bpoirier Unless required by applicable law or agreed to in writing, software
d229f940abfb2490dee17979e9a5ff31b7012eb5rbowen distributed under the License is distributed on an "AS IS" BASIS,
3f08db06526d6901aa08c110b5bc7dde6bc39905nd WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
60a4b2c422dcbb08a554fb193105c08da592718bpoirier See the License for the specific language governing permissions and
60a4b2c422dcbb08a554fb193105c08da592718bpoirier limitations under the License.
60a4b2c422dcbb08a554fb193105c08da592718bpoirier<description>Provides a rule-based rewriting engine to rewrite requested
60a4b2c422dcbb08a554fb193105c08da592718bpoirierURLs on the fly</description>
b97ba9a0b0f1bdad0bd7b4c5cb32319c2976b0aftrawick <p>The <module>mod_rewrite</module> module uses a rule-based rewriting
60a4b2c422dcbb08a554fb193105c08da592718bpoirier engine, based on a regular-expression parser, to rewrite requested URLs on
60a4b2c422dcbb08a554fb193105c08da592718bpoirier the fly. By default, <module>mod_rewrite</module> maps a URL to a filesystem
b97ba9a0b0f1bdad0bd7b4c5cb32319c2976b0aftrawick path. However, it can also be used to redirect one URL to another URL, or
60a4b2c422dcbb08a554fb193105c08da592718bpoirier to invoke an internal proxy fetch.</p>
60a4b2c422dcbb08a554fb193105c08da592718bpoirier <p><module>mod_rewrite</module> provides a flexible and powerful way to
60a4b2c422dcbb08a554fb193105c08da592718bpoirier manipulate URLs using an unlimited number of rules. Each rule can have an
60a4b2c422dcbb08a554fb193105c08da592718bpoirier unlimited number of attached rule conditions, to allow you to rewrite URL
60a4b2c422dcbb08a554fb193105c08da592718bpoirier based on server variables, environment variables, HTTP headers, or time
60a4b2c422dcbb08a554fb193105c08da592718bpoirier stamps.</p>
60a4b2c422dcbb08a554fb193105c08da592718bpoirier <p><module>mod_rewrite</module> operates on the full URL path, including the
60a4b2c422dcbb08a554fb193105c08da592718bpoirier path-info section. A rewrite rule can be invoked in
9a58dc6a2b26ec128b1270cf48810e705f1a90dbsf <code>httpd.conf</code> or in <code>.htaccess</code>. The path generated
60a4b2c422dcbb08a554fb193105c08da592718bpoirier by a rewrite rule can include a query string, or can lead to internal
60a4b2c422dcbb08a554fb193105c08da592718bpoirier sub-processing, external request redirection, or internal proxy
5cd08ee4a8f5a665e656f70048a1268a02bc0e73sf throughput.</p>
30471a4650391f57975f60bbb6e4a90be7b284bfhumbedooh <p>Further details, discussion, and examples, are provided in the
60a4b2c422dcbb08a554fb193105c08da592718bpoirier <a href="/rewrite/">detailed mod_rewrite documentation</a>.</p>
5cd08ee4a8f5a665e656f70048a1268a02bc0e73sf <p><module>mod_rewrite</module> offers detailed logging of its actions
60a4b2c422dcbb08a554fb193105c08da592718bpoirier at the <code>trace1</code> to <code>trace8</code> log levels. The
60a4b2c422dcbb08a554fb193105c08da592718bpoirier log level can be set specifically for <module>mod_rewrite</module>
60a4b2c422dcbb08a554fb193105c08da592718bpoirier using the <directive module="core">LogLevel</directive> directive: Up to
60a4b2c422dcbb08a554fb193105c08da592718bpoirier level <code>debug</code>, no actions are logged, while <code>trace8</code>
5cd08ee4a8f5a665e656f70048a1268a02bc0e73sf means that practically all actions are logged.</p>
60a4b2c422dcbb08a554fb193105c08da592718bpoirier Using a high trace log level for <module>mod_rewrite</module>
b97ba9a0b0f1bdad0bd7b4c5cb32319c2976b0aftrawick will slow down your Apache HTTP Server dramatically! Use a log
b97ba9a0b0f1bdad0bd7b4c5cb32319c2976b0aftrawick level higher than <code>trace2</code> only for debugging!
60a4b2c422dcbb08a554fb193105c08da592718bpoirier LogLevel alert rewrite:trace3
5cd08ee4a8f5a665e656f70048a1268a02bc0e73sf <p>Those familiar with earlier versions of
5cd08ee4a8f5a665e656f70048a1268a02bc0e73sf <module>mod_rewrite</module> will no doubt be looking for the
a04dcd330b05345681a4057702b2d43b2042e21dtrawick directives. This functionality has been completely replaced by the
a04dcd330b05345681a4057702b2d43b2042e21dtrawick new per-module logging configuration mentioned above.
f8b7daeb0e3f0ac4544fcc665de10c6b69a1ce0dsf <p>To get just the <module>mod_rewrite</module>-specific log
b97ba9a0b0f1bdad0bd7b4c5cb32319c2976b0aftrawick messages, pipe the log file through grep:</p>
5cd08ee4a8f5a665e656f70048a1268a02bc0e73sf tail -f error_log|fgrep '[rewrite:'
5cd08ee4a8f5a665e656f70048a1268a02bc0e73sf </example>
5cd08ee4a8f5a665e656f70048a1268a02bc0e73sf<directivesynopsis>
60a4b2c422dcbb08a554fb193105c08da592718bpoirier<description>Enables or disables runtime rewriting engine</description>
5cd08ee4a8f5a665e656f70048a1268a02bc0e73sf<contextlist><context>server config</context><context>virtual host</context>
5cd08ee4a8f5a665e656f70048a1268a02bc0e73sf<context>directory</context><context>.htaccess</context></contextlist>
bed3c2e56e8f3328e780200466b9d009093db468sf <p>The <directive>RewriteEngine</directive> directive enables or
bed3c2e56e8f3328e780200466b9d009093db468sf disables the runtime rewriting engine. If it is set to
bed3c2e56e8f3328e780200466b9d009093db468sf <code>off</code> this module does no runtime processing at
bed3c2e56e8f3328e780200466b9d009093db468sf environment variables.</p>
bed3c2e56e8f3328e780200466b9d009093db468sf <p>Use this directive to disable the module instead of
5cd08ee4a8f5a665e656f70048a1268a02bc0e73sf commenting out all the <directive
60a4b2c422dcbb08a554fb193105c08da592718bpoirier module="mod_rewrite">RewriteRule</directive> directives!</p>
60a4b2c422dcbb08a554fb193105c08da592718bpoirier <p>Note that rewrite configurations are not
b97ba9a0b0f1bdad0bd7b4c5cb32319c2976b0aftrawick inherited by virtual hosts. This means that you need to have a
b97ba9a0b0f1bdad0bd7b4c5cb32319c2976b0aftrawick <code>RewriteEngine on</code> directive for each virtual host
60a4b2c422dcbb08a554fb193105c08da592718bpoirier in which you wish to use rewrite rules.</p>
b97ba9a0b0f1bdad0bd7b4c5cb32319c2976b0aftrawick <p><directive>RewriteMap</directive> directives of the type <code>prg</code>
b97ba9a0b0f1bdad0bd7b4c5cb32319c2976b0aftrawick are not started during server initialization if they're defined in a
b97ba9a0b0f1bdad0bd7b4c5cb32319c2976b0aftrawick context that does not have <directive>RewriteEngine</directive> set to
bcb2c4ef861e8f8260284631b6753e1088643c8asf</directivesynopsis>
bcb2c4ef861e8f8260284631b6753e1088643c8asf<directivesynopsis>
60a4b2c422dcbb08a554fb193105c08da592718bpoirier<description>Sets some special options for the rewrite engine</description>
5cd08ee4a8f5a665e656f70048a1268a02bc0e73sf<contextlist><context>server config</context><context>virtual host</context>
5cd08ee4a8f5a665e656f70048a1268a02bc0e73sf<context>directory</context><context>.htaccess</context></contextlist>
60a4b2c422dcbb08a554fb193105c08da592718bpoirier<compatibility><code>MaxRedirects</code> is no longer available in version 2.1 and
b97ba9a0b0f1bdad0bd7b4c5cb32319c2976b0aftrawicklater</compatibility>
b97ba9a0b0f1bdad0bd7b4c5cb32319c2976b0aftrawick <p>The <directive>RewriteOptions</directive> directive sets some
b97ba9a0b0f1bdad0bd7b4c5cb32319c2976b0aftrawick special options for the current per-server or per-directory
b97ba9a0b0f1bdad0bd7b4c5cb32319c2976b0aftrawick configuration. The <em>Option</em> string can currently
5cd08ee4a8f5a665e656f70048a1268a02bc0e73sf only be one of the following:</p>
d474d8ef01ec5c2a09341cd148851ed383c3287crbowen <p>This forces the current configuration to inherit the
b97ba9a0b0f1bdad0bd7b4c5cb32319c2976b0aftrawick configuration of the parent. In per-virtual-server context,
0236ede61169f34359c234625a1d792b97d7db12nd this means that the maps, conditions and rules of the main
0236ede61169f34359c234625a1d792b97d7db12nd server are inherited. In per-directory context this means
60a4b2c422dcbb08a554fb193105c08da592718bpoirier that conditions and rules of the parent directory's
5cd08ee4a8f5a665e656f70048a1268a02bc0e73sf <directive type="section" module="core">Directory</directive>
5cd08ee4a8f5a665e656f70048a1268a02bc0e73sf sections are inherited. The inherited rules are virtually copied
60a4b2c422dcbb08a554fb193105c08da592718bpoirier to the section where this directive is being used. If used in
60a4b2c422dcbb08a554fb193105c08da592718bpoirier combination with local rules, the inherited rules are copied behind
60a4b2c422dcbb08a554fb193105c08da592718bpoirier the local rules. The position of this directive - below or above
b97ba9a0b0f1bdad0bd7b4c5cb32319c2976b0aftrawick of local rules - has no influence on this behavior. If local
5cd08ee4a8f5a665e656f70048a1268a02bc0e73sf rules forced the rewriting to stop, the inherited rules won't
60a4b2c422dcbb08a554fb193105c08da592718bpoirier be processed.</p>
b97ba9a0b0f1bdad0bd7b4c5cb32319c2976b0aftrawick Rules inherited from the parent scope are applied
b97ba9a0b0f1bdad0bd7b4c5cb32319c2976b0aftrawick <strong>after</strong> rules specified in the child scope.
b97ba9a0b0f1bdad0bd7b4c5cb32319c2976b0aftrawick <p> Like <code>Inherit</code> above, but the rules from the parent scope
b97ba9a0b0f1bdad0bd7b4c5cb32319c2976b0aftrawick are applied <strong>before</strong> rules specified in the child scope.
60a4b2c422dcbb08a554fb193105c08da592718bpoirier Available in Apache HTTP Server 2.3.10 and later.</p>
b97ba9a0b0f1bdad0bd7b4c5cb32319c2976b0aftrawick</directivesynopsis>
b97ba9a0b0f1bdad0bd7b4c5cb32319c2976b0aftrawick<directivesynopsis>
60a4b2c422dcbb08a554fb193105c08da592718bpoirier<description>Defines a mapping function for key-lookup</description>
b97ba9a0b0f1bdad0bd7b4c5cb32319c2976b0aftrawick<syntax>RewriteMap <em>MapName</em> <em>MapType</em>:<em>MapSource</em>
60a4b2c422dcbb08a554fb193105c08da592718bpoirier<contextlist><context>server config</context><context>virtual host</context>
5cd08ee4a8f5a665e656f70048a1268a02bc0e73sf</contextlist>
5cd08ee4a8f5a665e656f70048a1268a02bc0e73sf<compatibility>The choice of different dbm types is available in
5cd08ee4a8f5a665e656f70048a1268a02bc0e73sfApache HTTP Server 2.0.41 and later</compatibility>
60a4b2c422dcbb08a554fb193105c08da592718bpoirier <p>The <directive>RewriteMap</directive> directive defines a
b97ba9a0b0f1bdad0bd7b4c5cb32319c2976b0aftrawick <em>Rewriting Map</em> which can be used inside rule
b97ba9a0b0f1bdad0bd7b4c5cb32319c2976b0aftrawick substitution strings by the mapping-functions to
b97ba9a0b0f1bdad0bd7b4c5cb32319c2976b0aftrawick insert/substitute fields through a key lookup. The source of
b97ba9a0b0f1bdad0bd7b4c5cb32319c2976b0aftrawick this lookup can be of various types.</p>
b97ba9a0b0f1bdad0bd7b4c5cb32319c2976b0aftrawick <p>The <a id="mapfunc" name="mapfunc"><em>MapName</em></a> is
b97ba9a0b0f1bdad0bd7b4c5cb32319c2976b0aftrawick the name of the map and will be used to specify a
b97ba9a0b0f1bdad0bd7b4c5cb32319c2976b0aftrawick mapping-function for the substitution strings of a rewriting
b97ba9a0b0f1bdad0bd7b4c5cb32319c2976b0aftrawick rule via one of the following constructs:</p>
b97ba9a0b0f1bdad0bd7b4c5cb32319c2976b0aftrawick <strong><code>${</code> <em>MapName</em> <code>:</code>
60a4b2c422dcbb08a554fb193105c08da592718bpoirier <em>LookupKey</em> <code>|</code> <em>DefaultValue</em>
60a4b2c422dcbb08a554fb193105c08da592718bpoirier <p>When such a construct occurs, the map <em>MapName</em> is
60a4b2c422dcbb08a554fb193105c08da592718bpoirier consulted and the key <em>LookupKey</em> is looked-up. If the
60a4b2c422dcbb08a554fb193105c08da592718bpoirier key is found, the map-function construct is substituted by
60a4b2c422dcbb08a554fb193105c08da592718bpoirier <em>SubstValue</em>. If the key is not found then it is
60a4b2c422dcbb08a554fb193105c08da592718bpoirier substituted by <em>DefaultValue</em> or by the empty string
60a4b2c422dcbb08a554fb193105c08da592718bpoirier if no <em>DefaultValue</em> was specified. Empty values
b97ba9a0b0f1bdad0bd7b4c5cb32319c2976b0aftrawick behave as if the key was absent, therefore it is not possible
b97ba9a0b0f1bdad0bd7b4c5cb32319c2976b0aftrawick to distinguish between empty-valued keys and absent keys.</p>
5cd08ee4a8f5a665e656f70048a1268a02bc0e73sf <p>For example, you might define a
5cd08ee4a8f5a665e656f70048a1268a02bc0e73sf </example>
b6529ec5115d80b7dedcfd0935746015b2096084minfrin <p>You would then be able to use this map in a
b97ba9a0b0f1bdad0bd7b4c5cb32319c2976b0aftrawick RewriteRule ^/ex/(.*) ${examplemap:$1}
78f97ce162b66a0dbfd7af4dcd9984f162569b04minfrin <dd>A plain text file containing space-separated key-value
b6529ec5115d80b7dedcfd0935746015b2096084minfrin pairs, one per line. (<a href="/rewrite/rewritemap.html#txt">Details ...</a>)</dd>
b6529ec5115d80b7dedcfd0935746015b2096084minfrin <dd>Randomly selects an entry from a plain text file (<a href="/rewrite/rewritemap.html#rnd">Details ...</a>)</dd>
b6529ec5115d80b7dedcfd0935746015b2096084minfrin <dd>Looks up an entry in a dbm file containing name, value
78f97ce162b66a0dbfd7af4dcd9984f162569b04minfrin pairs. Hash is constructed from a plain text file format using
78f97ce162b66a0dbfd7af4dcd9984f162569b04minfrin the <code><a href="/programs/httxt2dbm.html">httxt2dbm</a></code>
78f97ce162b66a0dbfd7af4dcd9984f162569b04minfrin utility. (<a href="/rewrite/rewritemap.html#dbm">Details ...</a>)</dd>
78f97ce162b66a0dbfd7af4dcd9984f162569b04minfrin <dd>One of the four available internal functions provided by
78f97ce162b66a0dbfd7af4dcd9984f162569b04minfrin <code>RewriteMap</code>: toupper, tolower, escape or
5cd08ee4a8f5a665e656f70048a1268a02bc0e73sf unescape. (<a href="/rewrite/rewritemap.html#int">Details ...</a>)</dd>
60a4b2c422dcbb08a554fb193105c08da592718bpoirier <dd>Calls an external program or script to process the
60a4b2c422dcbb08a554fb193105c08da592718bpoirier rewriting. (<a href="/rewrite/rewritemap.html#prg">Details ...</a>)</dd>
5cd08ee4a8f5a665e656f70048a1268a02bc0e73sf <dd>A SQL SELECT statement to be performed to look up the
60a4b2c422dcbb08a554fb193105c08da592718bpoirier rewrite target. (<a href="/rewrite/rewritemap.html#dbd">Details ...</a>)</dd>
b97ba9a0b0f1bdad0bd7b4c5cb32319c2976b0aftrawick <p>Further details, and numerous examples, may be found in the <a
60a4b2c422dcbb08a554fb193105c08da592718bpoirier href="/rewrite/rewritemap.html">RewriteMap HowTo</a></p>
b97ba9a0b0f1bdad0bd7b4c5cb32319c2976b0aftrawick</directivesynopsis>
b97ba9a0b0f1bdad0bd7b4c5cb32319c2976b0aftrawick<directivesynopsis>
60a4b2c422dcbb08a554fb193105c08da592718bpoirier<description>Sets the base URL for per-directory rewrites</description>
5cd08ee4a8f5a665e656f70048a1268a02bc0e73sf<contextlist><context>directory</context><context>.htaccess</context>
60a4b2c422dcbb08a554fb193105c08da592718bpoirier</contextlist>
5cd08ee4a8f5a665e656f70048a1268a02bc0e73sf <p>The <directive>RewriteBase</directive> directive explicitly
5cd08ee4a8f5a665e656f70048a1268a02bc0e73sf sets the base URL-path (not filesystem directory path!) for per-directory rewrites.
5cd08ee4a8f5a665e656f70048a1268a02bc0e73sf When you use a <directive module="mod_rewrite">RewriteRule</directive>
60a4b2c422dcbb08a554fb193105c08da592718bpoirier in a <code>.htaccess</code> file, <module>mod_rewrite</module> strips off
60a4b2c422dcbb08a554fb193105c08da592718bpoirier the local directory prefix before processing, then rewrites the rest of
5cd08ee4a8f5a665e656f70048a1268a02bc0e73sf the URL. When the rewrite is completed, <module>mod_rewrite</module>
5cd08ee4a8f5a665e656f70048a1268a02bc0e73sf automatically adds the local directory prefix back on to the path.</p>
60a4b2c422dcbb08a554fb193105c08da592718bpoirier <p>This directive is <em>required</em> for per-directory rewrites whose context
b97ba9a0b0f1bdad0bd7b4c5cb32319c2976b0aftrawick is a directory made available via the <directive module="mod_alias">Alias</directive>
5cd08ee4a8f5a665e656f70048a1268a02bc0e73sf directive.</p>
5cd08ee4a8f5a665e656f70048a1268a02bc0e73sf <p>If your URL path does not exist verbatim on the filesystem,
60a4b2c422dcbb08a554fb193105c08da592718bpoirier or isn't directly under your <directive module="core">DocumentRoot</directive>,
b97ba9a0b0f1bdad0bd7b4c5cb32319c2976b0aftrawick you must use <directive>RewriteBase</directive> in every
b97ba9a0b0f1bdad0bd7b4c5cb32319c2976b0aftrawick <code>.htaccess</code> file where you want to use <directive
b97ba9a0b0f1bdad0bd7b4c5cb32319c2976b0aftrawick module="mod_rewrite">RewriteRule</directive> directives.</p>
5cd08ee4a8f5a665e656f70048a1268a02bc0e73sf <p>The example below demonstrates how to map
60a4b2c422dcbb08a554fb193105c08da592718bpoirier /home/www/example/newsite.html, in a <code>.htaccess</code> file. This
b97ba9a0b0f1bdad0bd7b4c5cb32319c2976b0aftrawick assumes that the content available at
60a4b2c422dcbb08a554fb193105c08da592718bpoirierRewriteEngine On
b97ba9a0b0f1bdad0bd7b4c5cb32319c2976b0aftrawick# The URL-path used to get to this context, not the filesystem path
5cd08ee4a8f5a665e656f70048a1268a02bc0e73sfRewriteBase /myapp/
5cd08ee4a8f5a665e656f70048a1268a02bc0e73sfRewriteRule ^index\.html$ newsite.html
5cd08ee4a8f5a665e656f70048a1268a02bc0e73sf</directivesynopsis>
5cd08ee4a8f5a665e656f70048a1268a02bc0e73sf<directivesynopsis>
5cd08ee4a8f5a665e656f70048a1268a02bc0e73sf<description>Defines a condition under which rewriting will take place
5cd08ee4a8f5a665e656f70048a1268a02bc0e73sf</description>
5cd08ee4a8f5a665e656f70048a1268a02bc0e73sf<syntax> RewriteCond
5cd08ee4a8f5a665e656f70048a1268a02bc0e73sf<contextlist><context>server config</context><context>virtual host</context>
5cd08ee4a8f5a665e656f70048a1268a02bc0e73sf<context>directory</context><context>.htaccess</context></contextlist>
5cd08ee4a8f5a665e656f70048a1268a02bc0e73sf <p>The <directive>RewriteCond</directive> directive defines a
8cef90cad1b259d4a94f6095aa30439c60549a5drbowen rule condition. One or more <directive>RewriteCond</directive>
8cef90cad1b259d4a94f6095aa30439c60549a5drbowen can precede a <directive module="mod_rewrite">RewriteRule</directive>
8cef90cad1b259d4a94f6095aa30439c60549a5drbowen directive. The following rule is then only used if both
5cd08ee4a8f5a665e656f70048a1268a02bc0e73sf the current state of the URI matches its pattern, <strong
33e4ab6c78a779cb3f72f7afed0fef9068f1b822trawick <p><em>TestString</em> is a string which can contain the
33e4ab6c78a779cb3f72f7afed0fef9068f1b822trawick following expanded constructs in addition to plain text:</p>
33e4ab6c78a779cb3f72f7afed0fef9068f1b822trawick <strong>RewriteRule backreferences</strong>: These are
33e4ab6c78a779cb3f72f7afed0fef9068f1b822trawick backreferences of the form <strong><code>$N</code></strong>
33e4ab6c78a779cb3f72f7afed0fef9068f1b822trawick (0 <= N <= 9). $1 to $9 provide access to the grouped
33e4ab6c78a779cb3f72f7afed0fef9068f1b822trawick parts (in parentheses) of the pattern, from the
33e4ab6c78a779cb3f72f7afed0fef9068f1b822trawick <code>RewriteRule</code> which is subject to the current
33e4ab6c78a779cb3f72f7afed0fef9068f1b822trawick set of <code>RewriteCond</code> conditions. $0 provides
33e4ab6c78a779cb3f72f7afed0fef9068f1b822trawick access to the whole string matched by that pattern.
33e4ab6c78a779cb3f72f7afed0fef9068f1b822trawick <strong>RewriteCond backreferences</strong>: These are
33e4ab6c78a779cb3f72f7afed0fef9068f1b822trawick backreferences of the form <strong><code>%N</code></strong>
33e4ab6c78a779cb3f72f7afed0fef9068f1b822trawick (0 <= N <= 9). %1 to %9 provide access to the grouped
33e4ab6c78a779cb3f72f7afed0fef9068f1b822trawick parts (again, in parentheses) of the pattern, from the last matched
33e4ab6c78a779cb3f72f7afed0fef9068f1b822trawick of conditions. %0 provides access to the whole string matched by
33e4ab6c78a779cb3f72f7afed0fef9068f1b822trawick that pattern.
5effc8b39fae5cd169d17f342bfc265705840014rbowen RewriteMap</a> for more details.
5effc8b39fae5cd169d17f342bfc265705840014rbowen <strong>Server-Variables</strong>: These are variables of
68e7d4f7d80c3e5ed94185cb28100bc786e4304atrawick where <em>NAME_OF_VARIABLE</em> can be a string taken
68e7d4f7d80c3e5ed94185cb28100bc786e4304atrawick from the following list:
68e7d4f7d80c3e5ed94185cb28100bc786e4304atrawick <columnspec><column width=".3"/><column width=".3"/>
9a58dc6a2b26ec128b1270cf48810e705f1a90dbsf <th>HTTP headers:</th> <th>connection & request:</th> <th></th>
2d5f033e0b60accdc5c92470a71c6e9cd6c90803trawick HTTP_USER_AGENT<br />
2d5f033e0b60accdc5c92470a71c6e9cd6c90803trawick HTTP_REFERER<br />
2d5f033e0b60accdc5c92470a71c6e9cd6c90803trawick HTTP_COOKIE<br />
2d5f033e0b60accdc5c92470a71c6e9cd6c90803trawick HTTP_FORWARDED<br />
2d5f033e0b60accdc5c92470a71c6e9cd6c90803trawick HTTP_HOST<br />
2d5f033e0b60accdc5c92470a71c6e9cd6c90803trawick HTTP_PROXY_CONNECTION<br />
2d5f033e0b60accdc5c92470a71c6e9cd6c90803trawick HTTP_ACCEPT<br />
2d5f033e0b60accdc5c92470a71c6e9cd6c90803trawick REMOTE_ADDR<br />
2509f1cd3be884abbe4852e15b8da00bebaad5b1poirier REMOTE_HOST<br />
2d5f033e0b60accdc5c92470a71c6e9cd6c90803trawick REMOTE_PORT<br />
2d5f033e0b60accdc5c92470a71c6e9cd6c90803trawick REMOTE_USER<br />
2d5f033e0b60accdc5c92470a71c6e9cd6c90803trawick REMOTE_IDENT<br />
2d5f033e0b60accdc5c92470a71c6e9cd6c90803trawick REQUEST_METHOD<br />
2d5f033e0b60accdc5c92470a71c6e9cd6c90803trawick SCRIPT_FILENAME<br />
2d5f033e0b60accdc5c92470a71c6e9cd6c90803trawick PATH_INFO<br />
2d5f033e0b60accdc5c92470a71c6e9cd6c90803trawick QUERY_STRING<br />
2d5f033e0b60accdc5c92470a71c6e9cd6c90803trawick AUTH_TYPE<br />
2d5f033e0b60accdc5c92470a71c6e9cd6c90803trawick <th>server internals:</th> <th>date and time:</th> <th>specials:</th>
2d5f033e0b60accdc5c92470a71c6e9cd6c90803trawick DOCUMENT_ROOT<br />
2d5f033e0b60accdc5c92470a71c6e9cd6c90803trawick SERVER_ADMIN<br />
2d5f033e0b60accdc5c92470a71c6e9cd6c90803trawick SERVER_NAME<br />
2d5f033e0b60accdc5c92470a71c6e9cd6c90803trawick SERVER_ADDR<br />
9a58dc6a2b26ec128b1270cf48810e705f1a90dbsf SERVER_PORT<br />
2d5f033e0b60accdc5c92470a71c6e9cd6c90803trawick SERVER_PROTOCOL<br />
2d5f033e0b60accdc5c92470a71c6e9cd6c90803trawick SERVER_SOFTWARE<br />
2d5f033e0b60accdc5c92470a71c6e9cd6c90803trawick TIME_YEAR<br />
2d5f033e0b60accdc5c92470a71c6e9cd6c90803trawick TIME_MON<br />
2d5f033e0b60accdc5c92470a71c6e9cd6c90803trawick TIME_DAY<br />
2d5f033e0b60accdc5c92470a71c6e9cd6c90803trawick TIME_HOUR<br />
2d5f033e0b60accdc5c92470a71c6e9cd6c90803trawick TIME_MIN<br />
2d5f033e0b60accdc5c92470a71c6e9cd6c90803trawick TIME_SEC<br />
2d5f033e0b60accdc5c92470a71c6e9cd6c90803trawick TIME_WDAY<br />
2d5f033e0b60accdc5c92470a71c6e9cd6c90803trawick API_VERSION<br />
2d5f033e0b60accdc5c92470a71c6e9cd6c90803trawick THE_REQUEST<br />
2d5f033e0b60accdc5c92470a71c6e9cd6c90803trawick REQUEST_URI<br />
2d5f033e0b60accdc5c92470a71c6e9cd6c90803trawick REQUEST_FILENAME<br />
2d5f033e0b60accdc5c92470a71c6e9cd6c90803trawick IS_SUBREQ<br />
2d5f033e0b60accdc5c92470a71c6e9cd6c90803trawick HTTPS<br />
4e3e4fcc70d6f02d1b8bbda4f7155f9b103773a6trawick <p>These variables all
4e3e4fcc70d6f02d1b8bbda4f7155f9b103773a6trawick correspond to the similarly named HTTP
4e3e4fcc70d6f02d1b8bbda4f7155f9b103773a6trawick MIME-headers, C variables of the Apache HTTP Server or
2d5f033e0b60accdc5c92470a71c6e9cd6c90803trawick Most are documented elsewhere in the Manual or in
2d5f033e0b60accdc5c92470a71c6e9cd6c90803trawick the CGI specification. Those that are special to
2d5f033e0b60accdc5c92470a71c6e9cd6c90803trawick mod_rewrite include those below.</p>
2d5f033e0b60accdc5c92470a71c6e9cd6c90803trawick <dd>Will contain the text "true" if the request
2d5f033e0b60accdc5c92470a71c6e9cd6c90803trawick currently being processed is a sub-request,
2d5f033e0b60accdc5c92470a71c6e9cd6c90803trawick "false" otherwise. Sub-requests may be generated
2d5f033e0b60accdc5c92470a71c6e9cd6c90803trawick by modules that need to resolve additional files
2d5f033e0b60accdc5c92470a71c6e9cd6c90803trawick or URIs in order to complete their tasks.</dd>
2d5f033e0b60accdc5c92470a71c6e9cd6c90803trawick <dd>This is the version of the Apache httpd module API
2d5f033e0b60accdc5c92470a71c6e9cd6c90803trawick (the internal interface between server and
2d5f033e0b60accdc5c92470a71c6e9cd6c90803trawick module) in the current httpd build, as defined in
2d5f033e0b60accdc5c92470a71c6e9cd6c90803trawick corresponds to the version of Apache httpd in use (in
2d5f033e0b60accdc5c92470a71c6e9cd6c90803trawick the release version of Apache httpd 1.3.14, for
2d5f033e0b60accdc5c92470a71c6e9cd6c90803trawick instance, it is 19990320:10), but is mainly of
2d5f033e0b60accdc5c92470a71c6e9cd6c90803trawick interest to module authors.</dd>
2d5f033e0b60accdc5c92470a71c6e9cd6c90803trawick <dd>The full HTTP request line sent by the
2d5f033e0b60accdc5c92470a71c6e9cd6c90803trawick include any additional headers sent by the
2d5f033e0b60accdc5c92470a71c6e9cd6c90803trawick browser.</dd>
2d5f033e0b60accdc5c92470a71c6e9cd6c90803trawick <dd>The resource requested in the HTTP request
2d5f033e0b60accdc5c92470a71c6e9cd6c90803trawick line. (In the example above, this would be
8cef90cad1b259d4a94f6095aa30439c60549a5drbowen <dd>The full local filesystem path to the file or
8cef90cad1b259d4a94f6095aa30439c60549a5drbowen script matching the request, if this has already
8cef90cad1b259d4a94f6095aa30439c60549a5drbowen been determined by the server at the time
8cef90cad1b259d4a94f6095aa30439c60549a5drbowen <code>REQUEST_FILENAME</code> is referenced. Otherwise,
8cef90cad1b259d4a94f6095aa30439c60549a5drbowen such as when used in virtual host context, the same
b97ba9a0b0f1bdad0bd7b4c5cb32319c2976b0aftrawick <dd>Will contain the text "on" if the connection is
b97ba9a0b0f1bdad0bd7b4c5cb32319c2976b0aftrawick can be safely used regardless of whether or not
c8ea2fd531ec56b7969ee48fc05655b503fa57a3minfrin <p>The variables SCRIPT_FILENAME and REQUEST_FILENAME
46fc29754beed5aa71b9dd9a69a85cc840b307f8minfrin contain the same value - the value of the
b97ba9a0b0f1bdad0bd7b4c5cb32319c2976b0aftrawick <code>request_rec</code> structure of the Apache HTTP Server.
46fc29754beed5aa71b9dd9a69a85cc840b307f8minfrin The first name is the commonly known CGI variable name
46fc29754beed5aa71b9dd9a69a85cc840b307f8minfrin while the second is the appropriate counterpart of
2d5f033e0b60accdc5c92470a71c6e9cd6c90803trawick REQUEST_URI (which contains the value of the
2d5f033e0b60accdc5c92470a71c6e9cd6c90803trawick <code>uri</code> field of <code>request_rec</code>).</p>
2d5f033e0b60accdc5c92470a71c6e9cd6c90803trawick <p>If a substitution occurred and the rewriting continues,
2d5f033e0b60accdc5c92470a71c6e9cd6c90803trawick the value of both variables will be updated accordingly.</p>
2d5f033e0b60accdc5c92470a71c6e9cd6c90803trawick <p>If used in per-server context (<em>i.e.</em>, before the
2d5f033e0b60accdc5c92470a71c6e9cd6c90803trawick request is mapped to the filesystem) SCRIPT_FILENAME and
2d5f033e0b60accdc5c92470a71c6e9cd6c90803trawick REQUEST_FILENAME cannot contain the full local filesystem
2d5f033e0b60accdc5c92470a71c6e9cd6c90803trawick path since the path is unknown at this stage of processing.
2d5f033e0b60accdc5c92470a71c6e9cd6c90803trawick Both variables will initially contain the value of REQUEST_URI
2d5f033e0b60accdc5c92470a71c6e9cd6c90803trawick in that case. In order to obtain the full local filesystem
2d5f033e0b60accdc5c92470a71c6e9cd6c90803trawick path of the request in per-server context, use an URL-based
2d5f033e0b60accdc5c92470a71c6e9cd6c90803trawick look-ahead <code>%{LA-U:REQUEST_FILENAME}</code> to determine
2d5f033e0b60accdc5c92470a71c6e9cd6c90803trawick <code>%{ENV:variable}</code>, where <em>variable</em> can be
2d5f033e0b60accdc5c92470a71c6e9cd6c90803trawick any environment variable, is also available.
2d5f033e0b60accdc5c92470a71c6e9cd6c90803trawick This is looked-up via internal
2d5f033e0b60accdc5c92470a71c6e9cd6c90803trawick Apache httpd structures and (if not found there) via
2d5f033e0b60accdc5c92470a71c6e9cd6c90803trawick <code>getenv()</code> from the Apache httpd server process.</li>
2d5f033e0b60accdc5c92470a71c6e9cd6c90803trawick <code>%{SSL:variable}</code>, where <em>variable</em> is the
2d5f033e0b60accdc5c92470a71c6e9cd6c90803trawick name of an <a href="mod_ssl.html#envvars">SSL environment
2d5f033e0b60accdc5c92470a71c6e9cd6c90803trawick variable</a>, can be used whether or not
2509f1cd3be884abbe4852e15b8da00bebaad5b1poirier <module>mod_ssl</module> is loaded, but will always expand to
2d5f033e0b60accdc5c92470a71c6e9cd6c90803trawick the empty string if it is not. Example:
2d5f033e0b60accdc5c92470a71c6e9cd6c90803trawick <code>%{SSL:SSL_CIPHER_USEKEYSIZE}</code> may expand to
2d5f033e0b60accdc5c92470a71c6e9cd6c90803trawick <code>%{HTTP:header}</code>, where <em>header</em> can be
2d5f033e0b60accdc5c92470a71c6e9cd6c90803trawick any HTTP MIME-header name, can always be used to obtain the
2d5f033e0b60accdc5c92470a71c6e9cd6c90803trawick value of a header sent in the HTTP request.
2d5f033e0b60accdc5c92470a71c6e9cd6c90803trawick the value of the HTTP header
2d5f033e0b60accdc5c92470a71c6e9cd6c90803trawick <p>If a HTTP header is used in a condition this header is added to
2d5f033e0b60accdc5c92470a71c6e9cd6c90803trawick the Vary header of the response in case the condition evaluates to
2d5f033e0b60accdc5c92470a71c6e9cd6c90803trawick to true for the request. It is <strong>not</strong> added if the
4e3e4fcc70d6f02d1b8bbda4f7155f9b103773a6trawick condition evaluates to false for the request. Adding the HTTP header
4e3e4fcc70d6f02d1b8bbda4f7155f9b103773a6trawick to the Vary header of the response is needed for proper caching.</p>
4e3e4fcc70d6f02d1b8bbda4f7155f9b103773a6trawick <p>It has to be kept in mind that conditions follow a short circuit
4e3e4fcc70d6f02d1b8bbda4f7155f9b103773a6trawick logic in the case of the '<strong><code>ornext|OR</code></strong>' flag
4e3e4fcc70d6f02d1b8bbda4f7155f9b103773a6trawick so that certain conditions might not be evaluated at all.</p></li>
4e3e4fcc70d6f02d1b8bbda4f7155f9b103773a6trawick <code>%{LA-U:variable}</code> can be used for look-aheads which perform
4e3e4fcc70d6f02d1b8bbda4f7155f9b103773a6trawick an internal (URL-based) sub-request to determine the final
2509f1cd3be884abbe4852e15b8da00bebaad5b1poirier value of <em>variable</em>. This can be used to access
5cd08ee4a8f5a665e656f70048a1268a02bc0e73sf variable for rewriting which is not available at the current
5cd08ee4a8f5a665e656f70048a1268a02bc0e73sf stage, but will be set in a later phase.
5cd08ee4a8f5a665e656f70048a1268a02bc0e73sf <p>For instance, to rewrite according to the
f086b4b402fa9a2fefc7dda85de2a3cc1cd0a654rjung per-server context (<code>httpd.conf</code> file) you must
0d0ba3a410038e179b695446bb149cce6264e0abnd variable is set by the authorization phases, which come
727872d18412fc021f03969b8641810d8896820bhumbedooh <em>after</em> the URL translation phase (during which mod_rewrite
cc7e1025de9ac63bd4db6fe7f71c158b2cf09fe4humbedooh operates).</p>
0d0ba3a410038e179b695446bb149cce6264e0abnd <p>On the other hand, because mod_rewrite implements
cc7e1025de9ac63bd4db6fe7f71c158b2cf09fe4humbedooh its per-directory context (<code>.htaccess</code> file) via
727872d18412fc021f03969b8641810d8896820bhumbedooh the Fixup phase of the API and because the authorization
0d0ba3a410038e179b695446bb149cce6264e0abnd <code>%{LA-F:variable}</code> can be used to perform an internal
0d0ba3a410038e179b695446bb149cce6264e0abnd (filename-based) sub-request, to determine the final value
0d0ba3a410038e179b695446bb149cce6264e0abnd of <em>variable</em>. Most of the time, this is the same as
727872d18412fc021f03969b8641810d8896820bhumbedooh LA-U above.</li>
5effc8b39fae5cd169d17f342bfc265705840014rbowen a regular expression which is applied to the
0d0ba3a410038e179b695446bb149cce6264e0abnd <em>TestString</em> is first evaluated, before being matched against
60a4b2c422dcbb08a554fb193105c08da592718bpoirier <em>perl compatible regular expression</em>, but there is
RewriteRule ...some special stuff for any of these hosts...
RewriteRule ^/$ /homepage.max.html [L]
RewriteRule ^/$ /homepage.min.html [L]
RewriteRule ^/$ /homepage.std.html [L]
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>