Rewrite rules are rules which apply to a string of characters, and replace some of these characters with another string. Chomsky's proposal for linguistics entailed that a grammar be described in terms of a finite number of rewrite rules capable of generating all and only grammatical sentences of a given language.
For example, E -> TF (where E is an expression, T is a term and F is a factor) is a rewrite rule (in the context free grammar for a RegularExpression.)
Most people reading this page will be more interested in Apache's rewrite rules, which let you take a nice URL as seen by visitors and internally rewrite it into the horrible one your backend needs.
mod_rewrite uses a rule-based rewriting engine (based on a regular-expression parser) to rewrite requested URLs on the fly. It supports an unlimited number of rules and an unlimited number of attached rule conditions for each rule to provide a really flexible and powerful URL manipulation mechanism. The URL manipulations can depend on various tests, for instance server variables, environment variables, HTTP headers, time stamps and even external database lookups in various formats can be used to achieve a really granular URL matching.
"The great thing about mod_rewrite is it gives you all the configurability and flexibility of Sendmail. The downside to mod_rewrite is that it gives you all the configurability and flexibility of Sendmail." -- Brian Behlendorf, Apache Group
See http://httpd.apache.org/docs/mod/mod_rewrite.html.
On a related not I was mucking about with phpWiki and trying to get it to work the same way you have it set up. Ie, using path info based urls (eg, /wiki/!SomePageHere?) and I couldn't get it to work. I'd be interested to know how you set yours up.
define('SCRIPT_NAME', '/wlug'); define('DATA_PATH', '/phpwiki-1.3.3'); define('VIRTUAL_PATH', '/wlug');
% mkdir wlug % cd wlug % cat >.htaccess <<EOF
RewriteRule? (.*) /phpwiki-1.3.3/index.php/$1 [L?
RewriteEngine? On
EOF
For the CRCnet wiki I do it this way
Action x-phpwiki-page /phpwiki/index.php
SetHandler? x-phpwiki-page
DirectoryIndex? /phpwiki/index.php
I think that is all :)
...with the above method you get issues with trailing slashes, or more specifically, lack of them. If you don't use one, the wiki will helpfully give you the definition of whatever you www root is. So to get around this, the following applies:
<Files wiki>
ForceType? application/x-httpd-php
</Files>
This will force Apache to treat the file as a PHP file even though it has no extension.
ini_set('include_path', '.:phpwiki-1.3.3');
to 'wiki'. Make sure you set this before anything else, particularly the include for prepend.php.
...and you should be all set.
One page links to RewriteRules: