|
1. Flags
|
redirect|R
[=code] |
(force redirect) |
Prefix Substitution with
http://thishost[:thisport]/ (which makes the
new URL a URI) to force a external redirection. If no
code is given a HTTP response of 302 (MOVED
TEMPORARILY) is used. If you want to use other response
codes in the range 300-400 just specify them as a number
or use one of the following symbolic names:
temp (default), permanent,
seeother. Use it for rules which should
canonicalize the URL and give it back to the client,
e.g., translate ``/~'' into
``/u/'' or always append a slash to
/u/user, etc.
Note: When you use this flag, make
sure that the substitution field is a valid URL! If not,
you are redirecting to an invalid location! And remember
that this flag itself only prefixes the URL with
http://thishost[:thisport]/, rewriting
continues. Usually you also want to stop and do the
redirection immediately. To stop the rewriting you also
have to provide the 'L' flag.
|
forbidden|F |
(force URL
to be forbidden) |
This forces the current URL to be forbidden,
i.e., it immediately sends back a HTTP response of
403 (FORBIDDEN). Use this flag in conjunction with
appropriate RewriteConds to conditionally block some
URLs. |
gone|G |
(force URL to be
gone) |
This forces the current URL to be gone, i.e., it
immediately sends back a HTTP response of 410 (GONE). Use
this flag to mark pages which no longer exist as gone. |
proxy|P |
(force
proxy) |
This flag forces the substitution part to be internally
forced as a proxy request and immediately (i.e.,
rewriting rule processing stops here) put through the proxy module. You have to make
sure that the substitution string is a valid URI
(e.g., typically starting with
http://hostname) which can be
handled by the Apache proxy module. If not you get an
error from the proxy module. Use this flag to achieve a
more powerful implementation of the ProxyPass directive,
to map some remote stuff into the namespace of the local
server.
Notice: To use this functionality make sure you have
the proxy module compiled into your Apache server
program. If you don't know please check whether
mod_proxy.c is part of the ``httpd
-l'' output. If yes, this functionality is
available to mod_rewrite. If not, then you first have to
rebuild the ``httpd'' program with mod_proxy
enabled.
|
last|L |
(last rule) |
Stop the rewriting process here and don't apply any more
rewriting rules. This corresponds to the Perl
last command or the break command
from the C language. Use this flag to prevent the currently
rewritten URL from being rewritten further by following
rules. For example, use it to rewrite the root-path URL
('/') to a real one, e.g.,
'/e/www/'. |
next|N |
(next round) |
Re-run the rewriting process (starting again with the
first rewriting rule). Here the URL to match is again not
the original URL but the URL from the last rewriting rule.
This corresponds to the Perl next command or
the continue command from the C language. Use
this flag to restart the rewriting process, i.e.,
to immediately go to the top of the loop.
But be careful not to create an infinite
loop! |
chain|C |
(chained with next rule) |
This flag chains the current rule with the next rule
(which itself can be chained with the following rule,
etc.). This has the following effect: if a rule
matches, then processing continues as usual, i.e.,
the flag has no effect. If the rule does
not match, then all following chained
rules are skipped. For instance, use it to remove the
``.www'' part inside a per-directory rule set
when you let an external redirect happen (where the
``.www'' part should not to occur!). |
type|T=MIME-type |
(force MIME type) |
Force the MIME-type of the target file to be
MIME-type. For instance, this can be used to
simulate the mod_alias directive
ScriptAlias which internally forces all files
inside the mapped directory to have a MIME type of
``application/x-httpd-cgi''. |
nosubreq|NS |
(used only if
no internal
sub-request) |
This flag forces the rewriting engine to skip a
rewriting rule if the current request is an internal
sub-request. For instance, sub-requests occur internally
in Apache when mod_include tries to find out
information about possible directory default files
(index.xxx). On sub-requests it is not
always useful and even sometimes causes a failure to if
the complete set of rules are applied. Use this flag to
exclude some rules.
Use the following rule for your decision: whenever you
prefix some URLs with CGI-scripts to force them to be
processed by the CGI-script, the chance is high that you
will run into problems (or even overhead) on
sub-requests. In these cases, use this flag.
|
nocase|NC |
(no case) |
This makes the Pattern case-insensitive,
i.e., there is no difference between 'A-Z' and
'a-z' when Pattern is matched against the current
URL. |
qsappend|QSA |
(query string
append) |
This flag forces the rewriting engine to append a query
string part in the substitution string to the existing one
instead of replacing it. Use this when you want to add more
data to the query string via a rewrite rule. |
noescape|NE |
(no URI escaping of
output) |
This flag keeps mod_rewrite from applying the usual URI
escaping rules to the result of a rewrite. Ordinarily,
special characters (such as '%', '$', ';', and so on)
will be escaped into their hexcode equivalents ('%25',
'%24', and '%3B', respectively); this flag prevents this
from being done. This allows percent symbols to appear in
the output, as in
RewriteRule /foo/(.*) /bar?arg=P1\%3d$1 [R,NE]
which would turn '/foo/zed' into a safe
request for '/bar?arg=P1=zed'.
Notice: The
noescape flag is only available with
Apache 1.3.20 and later versions. |
|
passthrough|PT |
(pass through to next
handler) |
This flag forces the rewriting engine to set the
uri field of the internal
request_rec structure to the value of the
filename field. This flag is just a hack to
be able to post-process the output of
RewriteRule directives by
Alias, ScriptAlias,
Redirect, etc. directives from
other URI-to-filename translators. A trivial example to
show the semantics: If you want to rewrite
/abc to /def via the rewriting
engine of mod_rewrite and then
/def to /ghi with
mod_alias:
RewriteRule ^/abc(.*) /def$1 [PT]
Alias /def /ghi
If you omit the PT flag then
mod_rewrite will do its job fine,
i.e., it rewrites uri=/abc/... to
filename=/def/... as a full API-compliant
URI-to-filename translator should do. Then
mod_alias comes and tries to do a
URI-to-filename transition which will not work.
Note: You have to use this flag if you want to
intermix directives of different modules which contain
URL-to-filename translators. The typical example
is the use of mod_alias and
mod_rewrite..
Note - For Apache
hackers:
If the current Apache API had a filename-to-filename
hook additionally to the URI-to-filename hook then we
wouldn't need this flag! But without such a hook this
flag is the only solution. The Apache Group has
discussed this problem and will add such a hook in
Apache version 2.0. |
|
skip|S=num |
(skip next rule(s)) |
This flag forces the rewriting engine to skip the next
num rules in sequence when the current rule
matches. Use this to make pseudo if-then-else constructs:
The last rule of the then-clause becomes
skip=N where N is the number of rules in the
else-clause. (This is not the same as the
'chain|C' flag!) |
env|E=VAR:VAL |
(set environment variable) |
This forces an environment variable named VAR to
be set to the value VAL, where VAL can
contain regexp backreferences $N and
%N which will be expanded. You can use this
flag more than once to set more than one variable. The
variables can be later dereferenced in many situations, but
usually from within XSSI (via <!--#echo
var="VAR"-->) or CGI (e.g.
$ENV{'VAR'}). Additionally you can dereference
it in a following RewriteCond pattern via
%{ENV:VAR}. Use this to strip but remember
information from URLs. |