The preceding section described
the Alias
module and its allies. Everything
these directives can do, and more, can be done instead by
mod_rewrite.c, an extremely compendious module
that is almost a complete software product in its own right. But for
simple tasks Alias
and friends are much easier to
use.
The documentation is thorough, and the reader is referred to http://www.engelschall.com/pw/apache/rewriteguide/ for any serious work. You should also look at http://www.apache.org/docs/mod/mod_rewrite.html. This section is intended for orientation only.
Rewrite
takes a
rewriting pattern and applies it to
the URL. If it matches, a rewriting substitution
is applied to the URL. The patterns are regular expressions
familiar to us all in their simplest form — for
example, mod.*\.c
, which
matches any module filename. The complete science of regular
expressions is somewhat extensive, and the reader is referred
to ... /src/regex/regex.7, a manpage that can be
read with nroff
-man
regex.7
(on FreeBSD, at least). Regular
expressions are also described in the POSIX specification and in
Jeffrey Friedl’s Mastering Regular
Expressions (O’Reilly, 2002).
It might well be worth using Perl to practice with regular expressions before using them in earnest. To make complicated expressions work, it is almost essential to build them up from simple ones, testing each change as you go. Even the most expert find that convoluted regular expressions often do not work the first time.
The essence of regular expressions is that a number of special characters can be used to match parts of incoming URLs. The substitutions available in mod_rewrite can include mapping functions that take bits of the incoming URL and look them up in databases or even apply programs to them. The rules can be applied repetitively and recursively to the evolving URL. It is possible (as the documentation says) to create “rewriting loops, rewriting breaks, chained rules, pseudo if-then-else constructs, forced redirects, forced MIME-types, forced proxy module throughout.” The functionality is so extensive that it is probably impossible to master it in the abstract. When and if you have a problem of this sort, it looks as if mod_rewrite can solve it, given enough intellectual horsepower on your part!
The module can be used in four situations:
By the administrator inside the server Config file to apply in all contexts. The rules are applied to all URLs of the main server and all URLs of the virtual servers.
By the administrator inside <VirtualHost>
blocks. The rules are applied only to the URLs of the virtual server.
By the administrator inside <Directory>
blocks. The rules are applied only to the specified directory.
By users in their .htaccess files. The rules are applied only to the specified directory.