g1smd - 1:22 am on Jul 25, 2013 (gmt 0)
Good answers so far. This topic is "simple" when you break it down to basics. The complicated bit is the actual code to implement it.
Just to clarify one thing: the rewriting process doesn't make or change any URLs! This is a common misconception.
When you have a site using http://example.com/index.php?page=about but you want instead to use http://example.com/about there are three steps to follow.
1. Change the links on the pages of your site so that the href value is in the new format that you want users to see and use. Everything begins with the click that generates a URL request.
2. Install a RewriteCond/RewriteRule pair that looks for external requests for the old URL format and then tells the browser to make a new request for the new URL format. This is an external redirect. Make sure it's a 301. The RewriteCond should test THE_REQUEST and it stops the possibility of an infinte redirect loop.
3. Set up a RewriteRule such that when a new format URL is requested, the request is mapped to the right place inside the server to fulfil the request. This is an internal rewrite.
Get step 3 working first. Then do step 1. Step 2 is optional, but removes the possibility of duplicate content.
You need to be completely clear as to the difference between a redirect and a rewrite, and be happy that a RewriteRule can be configured to perform either of those functions.
Additionally, once you start using RewriteRule on your site, you must use it for all of your rules. This means you must stop using Redirect and RedirectMatch rules and forget that those older directives ever existed.