mod_rewrite.html revision 3dfc894664859f528d379c5f52d6840485219161
c10c16dec587a0662068f6e2991c29ed3a9db943Richard Lowe<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
c10c16dec587a0662068f6e2991c29ed3a9db943Richard Lowe<!--%hypertext -->
c10c16dec587a0662068f6e2991c29ed3a9db943Richard Lowe<!-- Documentation for the mod_rewrite Apache module -->
c10c16dec587a0662068f6e2991c29ed3a9db943Richard Lowe<!-- Background white, links blue (unvisited), navy (visited), red (active) -->
c10c16dec587a0662068f6e2991c29ed3a9db943Richard Lowe BGCOLOR="#FFFFFF"
c10c16dec587a0662068f6e2991c29ed3a9db943Richard Lowe TEXT="#000000"
c10c16dec587a0662068f6e2991c29ed3a9db943Richard Lowe LINK="#0000FF"
c10c16dec587a0662068f6e2991c29ed3a9db943Richard Lowe VLINK="#000080"
c10c16dec587a0662068f6e2991c29ed3a9db943Richard Lowe ALINK="#FF0000"
c10c16dec587a0662068f6e2991c29ed3a9db943Richard Lowe<!--#include virtual="header.html" -->
c10c16dec587a0662068f6e2991c29ed3a9db943Richard Lowe<H1 ALIGN="CENTER">Module mod_rewrite<BR>URL Rewriting Engine</H1>
c10c16dec587a0662068f6e2991c29ed3a9db943Richard LoweThis module is contained in the <CODE>mod_rewrite.c</CODE> file, with Apache
c10c16dec587a0662068f6e2991c29ed3a9db943Richard Lowe1.2 and later. It provides a rule-based rewriting engine to rewrite requested
c10c16dec587a0662068f6e2991c29ed3a9db943Richard LoweURLs on the fly. It is not compiled into the server by default. To use
c10c16dec587a0662068f6e2991c29ed3a9db943Richard Lowe<CODE>mod_rewrite</CODE> you have to enable the following line in the server
c10c16dec587a0662068f6e2991c29ed3a9db943Richard Lowe<EM>``The great thing about mod_rewrite is it gives you all the
c10c16dec587a0662068f6e2991c29ed3a9db943Richard Loweconfigurability and flexibility of Sendmail. The downside to
c10c16dec587a0662068f6e2991c29ed3a9db943Richard Lowemod_rewrite is that it gives you all the configurability and
c10c16dec587a0662068f6e2991c29ed3a9db943Richard Loweflexibility of Sendmail.''</EM>
c10c16dec587a0662068f6e2991c29ed3a9db943Richard Lowe-- Brian Behlendorf<BR>
c10c16dec587a0662068f6e2991c29ed3a9db943Richard Lowe</BLOCKQUOTE>
c10c16dec587a0662068f6e2991c29ed3a9db943Richard Lowe</BLOCKQUOTE>
c10c16dec587a0662068f6e2991c29ed3a9db943Richard Lowe</BLOCKQUOTE>
c10c16dec587a0662068f6e2991c29ed3a9db943Richard LoweDespite the tons of examples and docs, mod_rewrite
c10c16dec587a0662068f6e2991c29ed3a9db943Richard Loweis voodoo. Damned cool voodoo, but still voodoo.
c10c16dec587a0662068f6e2991c29ed3a9db943Richard Lowe-- Brian Moore<BR>
c10c16dec587a0662068f6e2991c29ed3a9db943Richard Lowebem@news.cmc.net
c10c16dec587a0662068f6e2991c29ed3a9db943Richard Lowe</BLOCKQUOTE>
c10c16dec587a0662068f6e2991c29ed3a9db943Richard Lowe</BLOCKQUOTE>
c10c16dec587a0662068f6e2991c29ed3a9db943Richard Lowe</BLOCKQUOTE>
c10c16dec587a0662068f6e2991c29ed3a9db943Richard LoweWelcome to mod_rewrite, the Swiss Army Knife of URL manipulation!
c10c16dec587a0662068f6e2991c29ed3a9db943Richard LoweThis module uses a rule-based rewriting engine (based on a regular-expression
c10c16dec587a0662068f6e2991c29ed3a9db943Richard Loweparser) to rewrite requested URLs on the fly. It supports an unlimited number
c10c16dec587a0662068f6e2991c29ed3a9db943Richard Loweof rules and an unlimited number of attached rule conditions for each rule to
c10c16dec587a0662068f6e2991c29ed3a9db943Richard Loweprovide a really flexible and powerful URL manipulation mechanism. The URL
c10c16dec587a0662068f6e2991c29ed3a9db943Richard Lowemanipulations can depend on various tests, for instance server variables,
c10c16dec587a0662068f6e2991c29ed3a9db943Richard Loweenvironment variables, HTTP headers, time stamps and even external database
c10c16dec587a0662068f6e2991c29ed3a9db943Richard Lowelookups in various formats can be used to achieve a really granular URL
c10c16dec587a0662068f6e2991c29ed3a9db943Richard LoweThis module operates on the full URLs (including the path-info part) both in
c10c16dec587a0662068f6e2991c29ed3a9db943Richard Loweper-server context (<CODE>httpd.conf</CODE>) and per-directory context
c10c16dec587a0662068f6e2991c29ed3a9db943Richard Lowe(<CODE>.htaccess</CODE>) and even can generate query-string parts on result.
c10c16dec587a0662068f6e2991c29ed3a9db943Richard LoweThe rewritten result can lead to internal sub-processing, external request
c10c16dec587a0662068f6e2991c29ed3a9db943Richard Loweredirection or even to an internal proxy throughput.
c10c16dec587a0662068f6e2991c29ed3a9db943Richard LoweBut all this functionality and flexibility has its drawback: complexity. So
c10c16dec587a0662068f6e2991c29ed3a9db943Richard Lowedon't expect to understand this module in it's whole in just one day.
c10c16dec587a0662068f6e2991c29ed3a9db943Richard LoweThis module was invented and originally written in April 1996<BR>
c10c16dec587a0662068f6e2991c29ed3a9db943Richard Loweand gifted exclusively to the The Apache Group in July 1997 by
c10c16dec587a0662068f6e2991c29ed3a9db943Richard Lowe<A HREF="http://www.engelschall.com/"><CODE>Ralf S. Engelschall</CODE></A><BR>
c10c16dec587a0662068f6e2991c29ed3a9db943Richard Lowe<A HREF="mailto:rse@engelschall.com"><CODE>rse@engelschall.com</CODE></A><BR>
c10c16dec587a0662068f6e2991c29ed3a9db943Richard Lowe<A HREF="http://www.engelschall.com/"><CODE>www.engelschall.com</CODE></A>
c10c16dec587a0662068f6e2991c29ed3a9db943Richard Lowe</BLOCKQUOTE>
c10c16dec587a0662068f6e2991c29ed3a9db943Richard Lowe <LI><A HREF="#InternalRuleset">Ruleset Processing</A>
c10c16dec587a0662068f6e2991c29ed3a9db943Richard Lowe <LI><A HREF="#InternalBackRefs">Regex Back-Reference Availability</A>
c10c16dec587a0662068f6e2991c29ed3a9db943Richard Lowe <LI><A HREF="#RewriteOptions">RewriteOptions</A>
c10c16dec587a0662068f6e2991c29ed3a9db943Richard Lowe <LI><A HREF="#RewriteLogLevel">RewriteLogLevel</A>
c10c16dec587a0662068f6e2991c29ed3a9db943Richard Lowe <LI><A HREF="#EnvVar">Environment Variables</A>
c10c16dec587a0662068f6e2991c29ed3a9db943Richard Lowe <LI><A HREF="#Solutions">Practical Solutions</A>
c10c16dec587a0662068f6e2991c29ed3a9db943Richard Lowe<H1><A NAME="Internal">Internal Processing</A></H1>
c10c16dec587a0662068f6e2991c29ed3a9db943Richard LoweThe internal processing of this module is very complex but needs to be
c10c16dec587a0662068f6e2991c29ed3a9db943Richard Loweexplained once even to the average user to avoid common mistakes and to let
c10c16dec587a0662068f6e2991c29ed3a9db943Richard Loweyou exploit its full functionality.
c10c16dec587a0662068f6e2991c29ed3a9db943Richard LoweFirst you have to understand that when Apache processes a HTTP request it does
c10c16dec587a0662068f6e2991c29ed3a9db943Richard Lowethis in phases. A hook for each of these phases is provided by the Apache API.
c10c16dec587a0662068f6e2991c29ed3a9db943Richard LoweMod_rewrite uses two of these hooks: the URL-to-filename translation hook
c10c16dec587a0662068f6e2991c29ed3a9db943Richard Lowewhich is used after the HTTP request was read and before any authorization
c10c16dec587a0662068f6e2991c29ed3a9db943Richard Lowestarts and the Fixup hook which is triggered after the authorization phases
c10c16dec587a0662068f6e2991c29ed3a9db943Richard Loweand after the per-directory config files (<CODE>.htaccess</CODE>) where read,
c10c16dec587a0662068f6e2991c29ed3a9db943Richard Lowebut before the content handler is activated.
c10c16dec587a0662068f6e2991c29ed3a9db943Richard LoweSo, after a request comes in and Apache has determined the corresponding
c10c16dec587a0662068f6e2991c29ed3a9db943Richard Loweserver (or virtual server) the rewriting engine start processing of all
c10c16dec587a0662068f6e2991c29ed3a9db943Richard Lowemod_rewrite directives from the per-server configuration in the
c10c16dec587a0662068f6e2991c29ed3a9db943Richard LoweURL-to-filename phase. A few steps later when the final data directories are
c10c16dec587a0662068f6e2991c29ed3a9db943Richard Lowefound, the per-directory configuration directives of mod_rewrite are triggered
c10c16dec587a0662068f6e2991c29ed3a9db943Richard Lowein the Fixup phase. In both situations mod_rewrite either rewrites URLs to new
c10c16dec587a0662068f6e2991c29ed3a9db943Richard LoweURLs or to filenames, although there is no obvious distinction between them.
c10c16dec587a0662068f6e2991c29ed3a9db943Richard LoweThis is a usage of the API which was not intended this way when the API
c10c16dec587a0662068f6e2991c29ed3a9db943Richard Lowewas designed, but as of Apache 1.x this is the only way mod_rewrite can
c10c16dec587a0662068f6e2991c29ed3a9db943Richard Loweoperate. To make this point more clear remember the following two points:
c10c16dec587a0662068f6e2991c29ed3a9db943Richard Lowe<LI>The API currently provides only a URL-to-filename hook. Although
c10c16dec587a0662068f6e2991c29ed3a9db943Richard Lowe mod_rewrite rewrites URLs to URLs, URLs to filenames and even
c10c16dec587a0662068f6e2991c29ed3a9db943Richard Lowe filenames to filenames. In Apache 2.0 the two missing hooks
c10c16dec587a0662068f6e2991c29ed3a9db943Richard Lowe will be added to make the processing more clear. But this
c10c16dec587a0662068f6e2991c29ed3a9db943Richard Lowe point has no drawbacks for the user, it is just a fact which
c10c16dec587a0662068f6e2991c29ed3a9db943Richard Lowe should be remembered: Apache does more in the URL-to-filename hook
c10c16dec587a0662068f6e2991c29ed3a9db943Richard Lowe then the API intends for it.
c10c16dec587a0662068f6e2991c29ed3a9db943Richard Lowe<LI>Unbelievably mod_rewrite provides URL manipulations in per-directory
c10c16dec587a0662068f6e2991c29ed3a9db943Richard Lowe context, i.e. within <CODE>.htaccess</CODE> files, although these are
c10c16dec587a0662068f6e2991c29ed3a9db943Richard Lowe reached a very long time after the URLs were translated to filenames (this
4a3b1d5b615ff6e54da1cc17f331e1ac794c5191Bart Coddens has to be this way, because <CODE>.htaccess</CODE> files stay in the
4a3b1d5b615ff6e54da1cc17f331e1ac794c5191Bart Coddens filesystem, so processing has already been reached this stage of
4a3b1d5b615ff6e54da1cc17f331e1ac794c5191Bart Coddens processing). In other words: According to the API phases at this time it
4a3b1d5b615ff6e54da1cc17f331e1ac794c5191Bart Coddens is too late for any URL manipulations. To overcome this chicken and egg
4a3b1d5b615ff6e54da1cc17f331e1ac794c5191Bart Coddens problem mod_rewrite uses a trick: When you manipulate a URL/filename in
c10c16dec587a0662068f6e2991c29ed3a9db943Richard Lowe per-directory context mod_rewrite first rewrites the filename back to its
c10c16dec587a0662068f6e2991c29ed3a9db943Richard Lowe corresponding URL (which it usually impossible, but see the
c10c16dec587a0662068f6e2991c29ed3a9db943Richard Lowe <CODE>RewriteBase</CODE> directive below for the trick to achieve this)
c10c16dec587a0662068f6e2991c29ed3a9db943Richard Lowe and then initiates a new internal sub-request with the new URL. This leads
c10c16dec587a0662068f6e2991c29ed3a9db943Richard Lowe to a new processing of the API phases from the beginning.
c10c16dec587a0662068f6e2991c29ed3a9db943Richard Lowe Again mod_rewrite tries hard to make this complicated step totally
c10c16dec587a0662068f6e2991c29ed3a9db943Richard Lowe transparent to the user, but you should remember here: While URL
c10c16dec587a0662068f6e2991c29ed3a9db943Richard Lowe manipulations in per-server context are really fast and efficient,
c10c16dec587a0662068f6e2991c29ed3a9db943Richard Lowe per-directory rewrites are slow and inefficient due to this chicken and
c10c16dec587a0662068f6e2991c29ed3a9db943Richard Lowe egg problem. But on the other hand this is the only way mod_rewrite can
c10c16dec587a0662068f6e2991c29ed3a9db943Richard Lowe provide (locally restricted) URL manipulations to the average user.
c10c16dec587a0662068f6e2991c29ed3a9db943Richard LoweDon't forget these two points!
c10c16dec587a0662068f6e2991c29ed3a9db943Richard Lowe<H2><A NAME="InternalRuleset">Ruleset Processing</A></H2>
c10c16dec587a0662068f6e2991c29ed3a9db943Richard LoweNow when mod_rewrite is triggered in these two API phases, it reads the
c10c16dec587a0662068f6e2991c29ed3a9db943Richard Loweconfigured rulesets from its configuration structure (which itself was either
c10c16dec587a0662068f6e2991c29ed3a9db943Richard Lowecreated on startup for per-server context or while the directory walk of the
c10c16dec587a0662068f6e2991c29ed3a9db943Richard LoweApache kernel for per-directory context). Then the URL rewriting engine is
c10c16dec587a0662068f6e2991c29ed3a9db943Richard Lowestarted with the contained ruleset (one or more rules together with their
c10c16dec587a0662068f6e2991c29ed3a9db943Richard Loweconditions). The operation of the URL rewriting engine itself is exactly the
c10c16dec587a0662068f6e2991c29ed3a9db943Richard Lowesame for both configuration contexts. Just the final result processing is
c10c16dec587a0662068f6e2991c29ed3a9db943Richard LoweThe order of rules in the ruleset is important because the rewriting engine
c10c16dec587a0662068f6e2991c29ed3a9db943Richard Loweprocesses them in a special order. And this order is not very obvious. The
c10c16dec587a0662068f6e2991c29ed3a9db943Richard Lowerule is this: The rewriting engine loops through the ruleset rule by rule
c10c16dec587a0662068f6e2991c29ed3a9db943Richard Lowe(<CODE>RewriteRule</CODE> directives!) and when a particular rule matched it
c10c16dec587a0662068f6e2991c29ed3a9db943Richard Loweoptionally loops through existing corresponding conditions
c10c16dec587a0662068f6e2991c29ed3a9db943Richard Lowe(<CODE>RewriteCond</CODE> directives). Because of historical reasons the
c10c16dec587a0662068f6e2991c29ed3a9db943Richard Loweconditions are given first, the control flow is a little bit winded. See
c10c16dec587a0662068f6e2991c29ed3a9db943Richard LoweFigure 1 for more details.
c10c16dec587a0662068f6e2991c29ed3a9db943Richard Lowe ALT="[Needs graphics capability to display]"></TD>
c10c16dec587a0662068f6e2991c29ed3a9db943Richard Lowe<STRONG>Figure 1:</STRONG> The control flow through the rewriting ruleset
c10c16dec587a0662068f6e2991c29ed3a9db943Richard LoweAs you can see, first the URL is matched against the <EM>Pattern</EM> of each
c10c16dec587a0662068f6e2991c29ed3a9db943Richard Lowerule. When it fails mod_rewrite immediately stops processing this rule and
c10c16dec587a0662068f6e2991c29ed3a9db943Richard Lowecontinues with the next rule. If the <EM>Pattern</EM> matched, mod_rewrite
c10c16dec587a0662068f6e2991c29ed3a9db943Richard Lowelooks for corresponding rule conditions. If none are present, it just
c10c16dec587a0662068f6e2991c29ed3a9db943Richard Lowesubstitutes the URL with a new value which is constructed from the string
c10c16dec587a0662068f6e2991c29ed3a9db943Richard Lowe<EM>Substitution</EM> and goes on with its rule-looping. But if conditions But
c10c16dec587a0662068f6e2991c29ed3a9db943Richard Loweif conditions exists, it starts an inner loop for processing them in order
c10c16dec587a0662068f6e2991c29ed3a9db943Richard Lowethey are listed. For conditions the logic is different: We don't match a
c10c16dec587a0662068f6e2991c29ed3a9db943Richard Lowepattern against the current URL. Instead we first create a string
c10c16dec587a0662068f6e2991c29ed3a9db943Richard Lowe<EM>TestString</EM> by expanding variables, back-references, map lookups, etc.
c10c16dec587a0662068f6e2991c29ed3a9db943Richard Loweand then we try to match <EM>TestPattern</EM> against it. If the pattern
c10c16dec587a0662068f6e2991c29ed3a9db943Richard Lowedoesn't match, the complete set of conditions and the corresponding rule fails.
c10c16dec587a0662068f6e2991c29ed3a9db943Richard LoweIf the pattern matches, then the next condition is processed until no more
c10c16dec587a0662068f6e2991c29ed3a9db943Richard Lowecondition is available. If all conditions matched processing is continued with
c10c16dec587a0662068f6e2991c29ed3a9db943Richard Lowethe substitution of the URL with <EM>Substitution</EM>.
c10c16dec587a0662068f6e2991c29ed3a9db943Richard Lowe<H2><A NAME="InternalBackRefs">Regex Back-Reference Availability</A></H2>
c10c16dec587a0662068f6e2991c29ed3a9db943Richard LoweOne important thing here has to be remembered: Whenever you
c10c16dec587a0662068f6e2991c29ed3a9db943Richard Loweuse parenthesis in <EM>Pattern</EM> or in one of the <EM>TestPattern</EM>
c10c16dec587a0662068f6e2991c29ed3a9db943Richard Loweback-reference are internally created which can be used with the
c10c16dec587a0662068f6e2991c29ed3a9db943Richard Lowestrings <CODE>$N</CODE> and <CODE>%N</CODE> (see below). And these
c10c16dec587a0662068f6e2991c29ed3a9db943Richard Loweare available for creating the strings <EM>Substitution</EM> and
c10c16dec587a0662068f6e2991c29ed3a9db943Richard Lowe<EM>TestCond</EM>. Figure 2 shows at which locations the back-references are
c10c16dec587a0662068f6e2991c29ed3a9db943Richard Lowetransfered to for expansion.
c10c16dec587a0662068f6e2991c29ed3a9db943Richard Lowe ALT="[Needs graphics capability to display]"></TD>
c10c16dec587a0662068f6e2991c29ed3a9db943Richard Lowe<STRONG>Figure 2:</STRONG> The back-reference flow through a rule
c10c16dec587a0662068f6e2991c29ed3a9db943Richard LoweWe know, this was a crash course of mod_rewrite's internal processing. But
c10c16dec587a0662068f6e2991c29ed3a9db943Richard Loweyou will benefit from this knowledge when reading the following documentation
ed22c7109fc5dd9e1b7a5d0333bdc7ad2718e2abYuri Pankovof the available directives.
c10c16dec587a0662068f6e2991c29ed3a9db943Richard Lowe<H1><A NAME="Configuration">Configuration Directives</A></H1>
c10c16dec587a0662068f6e2991c29ed3a9db943Richard Lowe<H3><A NAME="RewriteEngine">RewriteEngine</A></H3>
c10c16dec587a0662068f6e2991c29ed3a9db943Richard Lowe><STRONG>Syntax:</STRONG></A> <CODE>RewriteEngine</CODE> {<CODE>on,off</CODE>}<BR>
c10c16dec587a0662068f6e2991c29ed3a9db943Richard Lowe><STRONG>Default:</STRONG></A> <STRONG><CODE>RewriteEngine off</CODE></STRONG><BR>
HREF="directive-dict.html#Context"
HREF="directive-dict.html#Override"
HREF="directive-dict.html#Status"
HREF="directive-dict.html#Module"
HREF="directive-dict.html#Compatibility"
HREF="directive-dict.html#Syntax"
HREF="directive-dict.html#Default"
HREF="directive-dict.html#Context"
HREF="directive-dict.html#Override"
HREF="directive-dict.html#Status"
HREF="directive-dict.html#Module"
HREF="directive-dict.html#Compatibility"
HREF="directive-dict.html#Syntax"
HREF="directive-dict.html#Default"
HREF="directive-dict.html#Context"
HREF="directive-dict.html#Override"
HREF="directive-dict.html#Status"
HREF="directive-dict.html#Module"
HREF="directive-dict.html#Compatibility"
HREF="/misc/security_tips.html">Apache Security
HREF="directive-dict.html#Syntax"
HREF="directive-dict.html#Default"
HREF="directive-dict.html#Context"
HREF="directive-dict.html#Override"
HREF="directive-dict.html#Status"
HREF="directive-dict.html#Module"
HREF="directive-dict.html#Compatibility"
HREF="directive-dict.html#Syntax"
HREF="directive-dict.html#Default"
HREF="directive-dict.html#Context"
HREF="directive-dict.html#Override"
HREF="directive-dict.html#Status"
HREF="directive-dict.html#Module"
HREF="directive-dict.html#Compatibility"
HREF="directive-dict.html#Syntax"
><STRONG>Syntax:</STRONG></A> <CODE>RewriteMap</CODE> <EM>MapName</EM> <EM>MapType</EM><CODE>:</CODE><EM>MapSource</EM><BR>
HREF="directive-dict.html#Default"
HREF="directive-dict.html#Context"
HREF="directive-dict.html#Override"
HREF="directive-dict.html#Status"
HREF="directive-dict.html#Module"
HREF="directive-dict.html#Compatibility"
## map.txt -- rewriting map
Ralf.S.Engelschall rse # Bastard Operator From Hell
Mr.Joe.Average joe # Mr. Average
## map.txt -- rewriting map
executable (i.e. either object-code or a script with the
(i.e. key == value) could be:
# ...here any transformations
HREF="directive-dict.html#Syntax"
HREF="directive-dict.html#Default"
HREF="directive-dict.html#Context"
HREF="directive-dict.html#Override"
HREF="directive-dict.html#Status"
HREF="directive-dict.html#Module"
HREF="directive-dict.html#Compatibility"
locally, i.e. the local directory prefix is stripped at this stage of
RewriteRule ^oldstuff\.html$ newstuff.html
HREF="directive-dict.html#Syntax"
HREF="directive-dict.html#Default"
HREF="directive-dict.html#Context"
HREF="directive-dict.html#Override"
HREF="directive-dict.html#Status"
HREF="directive-dict.html#Module"
HREF="directive-dict.html#Compatibility"
This makes the condition test case-insensitive, i.e. 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]
HREF="directive-dict.html#Syntax"
HREF="directive-dict.html#Default"
HREF="directive-dict.html#Context"
HREF="directive-dict.html#Override"
HREF="directive-dict.html#Status"
HREF="directive-dict.html#Module"
HREF="directive-dict.html#Compatibility"
<LI>'<STRONG><CODE>redirect|R</CODE> [=<EM>code</EM>]</STRONG>' (force <A NAME="redirect"><STRONG>r</STRONG>edirect</A>)<BR>
canonicalize the URL and gives it back to the client, e.g. translate
This forces the current URL to be forbidden, i.e. it immediately sends
This forces the current URL to be gone, i.e. it immediately sends back a
request and immediately (i.e. rewriting rule processing stops here) put
sure that the substitution string is a valid URI (e.g. typically starting
language. Use this flag to restart the rewriting process, i.e. to
effect: if a rule matches, then processing continues as usual, i.e. the
<LI>'<STRONG><CODE>type|T</CODE></STRONG>=<EM>mime-type</EM>' (force MIME <STRONG>t</STRONG>ype)<BR>
<LI>'<STRONG><CODE>nosubreq|NS</CODE></STRONG>' (used only if <STRONG>n</STRONG>o internal <STRONG>s</STRONG>ub-request)<BR>
<LI>'<STRONG><CODE>passthrough|PT</CODE></STRONG>' (<STRONG>p</STRONG>ass <STRONG>t</STRONG>hrough to next handler)<BR>
<LI>'<STRONG><CODE>env|E=</CODE></STRONG><EM>VAR</EM>:<EM>VAL</EM>' (set <STRONG>e</STRONG>nvironment variable)<BR>
^/somepath(.*) /otherpath$1 [R] http://thishost/otherpath/pathinfo
^/somepath(.*) http://thishost/otherpath$1 [P] not supported, because silly!
^localpath(.*) otherpath$1 [R] http://thishost/somepath/otherpath/pathinfo
^localpath(.*) /otherpath$1 [R] http://thishost/otherpath/pathinfo
^localpath(.*) http://thishost/otherpath$1 [P] not supported, because silly!
SCRIPT_URI=http://en1.engelschall.com/u/rse/
<!--#include virtual="footer.html" -->